【问题标题】:Download images from String URL Array and save to File?从字符串 URL 数组下载图像并保存到文件?
【发布时间】:2017-09-07 22:05:57
【问题描述】:

我有一个字符串版本的 url 数组(我正在使用字符串,因为在我的应用程序的其他部分需要它们的字符串版本)。

我已将字符串转换为 url,然后尝试使用 AlamoFire 下载图像,然后使用 FileManager 保存它们。

尝试此操作后,我一无所获,并查看了整个 stackoverflow,只是让自己更加困惑..

假设我有一个字符串 url 数组,例如

["www.url1.com/image1.png","www.url2.com/image2.png"]

并且该数组的长度在 5-1000 个 url 之间(取决于用户选择要显示的数量)

我将如何将这些图像保存到文件管理器或缓存中,以便每次显示视图时都不会重新下载图像? 此外,图像将被命名为“0.png”、“1.png”等,因此名称反映了它们在数组中的索引。

【问题讨论】:

  • 更好的选择是使用github.com/Alamofire/AlamofireImagegithub.com/rs/SDWebImage,因为这些库处理图像上的所有缓存操作(当您再次引用它们时,它们会下载图像、保存并从文件系统加载它url),因此您无需下载图像、保存图像、考虑命名、缓存......
  • 感谢 Vladimir,使用了 SDWebImage,它解决了我的问题 :)

标签: ios arrays swift alamofire


【解决方案1】:

不会为您编写代码,但这是我会采用的一般方法:

  1. 使用FileManager 获取FileManager.SearchPathDirectory.cachesDirectory 的URL。

(Swift 4;名称在 Swift 3 中可能略有不同,不记得了)

  1. 使用.appendingPathComponent 创建一个以应用程序包标识符命名的子目录。

  2. 如果子目录不存在,则创建它。

  3. 使用您喜欢的任何组织方案,为代表您的网络 URL 的子目录中的文件构建一个 URL。

  4. 检查您刚刚创建的 URL,查看文件是否存在。如果有,请阅读。

  5. 如果步骤5中的文件不存在,则创建文件,从网络下载数据,并将其存储在文件中。

请注意,这一切都假设您一次只有一个线程读取或写入缓存。如果您的应用是多线程的,则需要设置适当的保护措施来防止出现竞争情况。

【讨论】:

  • 嗨,谢谢你的回答:)。 Vladimir 使用 SDWebImage 的解决方案解决了我遇到的问题。
猜你喜欢
  • 2020-05-25
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多