如何将图像保存到png文件?

时间:2018-01-19 07:44:59

标签: swift

如何从指定的网址加载图片并将其保存到现有的本地png文件?我正在尝试按照以下方式执行此操作,但会出现错误

  

由于不支持指定的网址类型,因此无法保存文件

let url = URL(string: urlString)
let data = try? Data(contentsOf: url!)
try data?.write(to: URL(string: "icon.png")!) 

2 个答案:

答案 0 :(得分:4)

首先从不使用同步Data(contentsOf从服务器加载数据。

发生错误是因为网址格式错误

  • 远程URL必须包含方案和主机(http://server.com...
  • 必须使用URL(fileURLWithPath:创建文件系统中的本地URL,路径必须以斜杠开头。

答案 1 :(得分:0)

使用以下代码异步下载文件:

extension FileManager {

    open func secureCopyItem(at srcURL: URL, to dstURL: URL) -> Bool {
        do {
            if FileManager.default.fileExists(atPath: dstURL.path) {
                try FileManager.default.removeItem(at: dstURL)
            }
            try FileManager.default.copyItem(at: srcURL, to: dstURL)
        } catch (let error) {
            print("Cannot copy item at \(srcURL) to \(dstURL): \(error)")
            return false
        }
        return true
    }

}

func download() {
    let storagePathUrl = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("file.png")
    let fileUrl = "https://server/file.png"
    let urlRequest = URLRequest(url: URL(string: fileUrl)!)
    let task = URLSession.shared.downloadTask(with: urlRequest) { tempLocalUrl, response, error in
        guard error == nil, let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
            print("Error")
            return
        }
        guard FileManager.default.secureCopyItem(at: tempLocalUrl!, to: storagePathUrl) else {
            print("Error")
            return
        }
    }
    task.resume()
}
相关问题