从字符串 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 共享它