从字符串 URL 数组下载图像并保存到文件?

Posted

技术标签:

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

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

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

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

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

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

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

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

【问题讨论】:

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

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

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

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

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

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

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

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

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

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

【讨论】:

嗨,谢谢你的回答:)。 Vladimir 使用 SDWebImage 的解决方案解决了我遇到的问题。

以上是关于从字符串 URL 数组下载图像并保存到文件?的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:将 URLS 从 URL 保存到数组

Swift - AlamofireImage 下载多个 URL 并显示在 CollectionView 中

将图像从 URL 保存到库,重命名并使用 Swift 共享它

从 URL 下载图像并添加到滚动视图子视图

如何使用 NSURlConnection 从 Url 下载图像以保存在手机缓存中

从 url 下载文件并将其上传到 AWS S3 而不保存 - node.js