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

Posted

技术标签:

【中文标题】如何使用 NSURlConnection 从 Url 下载图像以保存在手机缓存中【英文标题】:How to download image from Url using of NSURlConnection to save in phone cache 【发布时间】:2016-11-04 09:41:33 【问题描述】:

我正在使用 NSUrlconnection 调用 api,但现在我也从 api 接收图像,所以我不知道如何加载图像并保存到手机本地内存中,因为这些图像在 app 中进一步使用。请帮我。如何使用和显示本地保存的图像。我正在使用下面的函数来加载图像,但 NSURLSession.sharedSession() 不会进入队列。

 func saveImage(url:NSString,image_name1:NSString)
    
        NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url as String)!, completionHandler:  (data, response, error) -> Void in

                        if error != nil 
                            print(error)
                            return
                        
                        dispatch_async(dispatch_get_main_queue(),  () -> Void in
                            let image = UIImage(data: data!)
                            var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
                            let documentsDirectory = paths[0]
                            let path = NSURL(fileURLWithPath: documentsDirectory).URLByAppendingPathComponent(image_name1 as String)!.absoluteString
                            print(" file path is \(path)")
                            let data = UIImagePNGRepresentation(image!)
                            data!.writeToFile(path!, atomically: true)

                        )

                    ).resume()



   

【问题讨论】:

NSURLConnection 已弃用,您应该使用 NSURLSession 兄弟,但它在我的代码中工作 【参考方案1】:

保存

var image = ....  // However you create/get a UIImage
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let destinationPath = documentsPath.stringByAppendingPathComponent("filename.jpg")
UIImageJPEGRepresentation(image,1.0).writeToFile(destinationPath, atomically: true)

现金

https://github.com/onevcat/Kingfisher

pod '翠鸟'

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)

这是自动现金图片

【讨论】:

兄弟,我的要求是先存储本地内存,然后使用这些图像 var image = .... // 但是你创建/获取一个 UIImage let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String let destinationPath = documentsPath.stringByAppendingPathComponent(" filename.jpg") UIImageJPEGRepresentation(image,1.0).writeToFile(destinationPath, atomically: true) 兄弟使用nsurlconnection如何加载图片【参考方案2】:

试试这个:

let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
imageView.image = UIImage(data: data!)

发件人:https://***.com/a/27517280/3901620

【讨论】:

让数据 = 试试? NSData(contentsOfURL:(NSURL(string: url as String))!) let image = UIImage(data: data!!) var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let documentsDirectory = paths[0] let path = NSURL(fileURLWithPath: documentsDirectory).URLByAppendingPathComponent(image_name1 as String)!.absoluteString print("file path is (path)") let data1 = UIImagePNGRepresentation(image!) let result = data1!.writeToFile(path!, atomically: true) print("result is (result)") 它显示为假 你得到数据中的字节了吗?

以上是关于如何使用 NSURlConnection 从 Url 下载图像以保存在手机缓存中的主要内容,如果未能解决你的问题,请参考以下文章

如何从 NSURLConnection 委托发送多个 url 请求?

NSURLSession/NSURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9802) Xamarin.Forms IOS

如何在情节提要中使用 NSURLConnection 下载文件

NSURLConnection 完成错误 - 代码 -1100

使用来自异步 NSURLConnection 的数据填充 NSImage

iPhone NSURLConnection:connectionDidFinishLoading - 如何将字符串返回给调用方法