如何快速复制文档目录中的远程服务器文件
Posted
技术标签:
【中文标题】如何快速复制文档目录中的远程服务器文件【英文标题】:How to copy remote server file in document directory in swift 【发布时间】:2016-08-05 07:56:41 【问题描述】:我知道如何在 Swift 中获取远程 URL
let remoteURL = NSURL(string: "https://myserver/file.txt")!
我知道如何在 Swift 中获取本地 URL
let localURL = NSURL(fileURLWithPath: documentsFolder + "/my_local_file.txt")
不幸的是,这不起作用
NSFileManager.defaultManager().copyItemAtURL(remoteURL, toURL: localURL)
出现以下错误
The file “file.txt” couldn’t be opened because URL type https isn’t supported.
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:你可以使用 NSURLSessionDownloadTask 来下载文件:
func downloadFile(url: URL)
let downloadRequest = URLRequest(url: url)
URLSession.shared.downloadTask(with: downloadRequest) location, response, error in
// To do check resoponse before saving
guard let tempLocation = location where error == nil else return
let documentDirectory = FileManager.default.urlsForDirectory(.documentDirectory, inDomains: .userDomainMask).last
do
let fullURL = try documentDirectory?.appendingPathComponent((response?.suggestedFilename!)!)
try FileManager.default.moveItem(at: tempLocation, to: fullURL!)
print("saved at \(fullURL) ")
catch NSCocoaError.fileReadNoSuchFileError
print("No such file")
catch
// other errors
print("Error downloading file : \(error)")
.resume()
let stringURL = "https://wordpress.org/plugins/about/readme.txt"
downloadImage(url: URL(string: stringURL)!)
更新:SWIFT 2.2
func downloadFile(url: NSURL)
let downloadRequest = NSURLRequest(URL: url)
NSURLSession.sharedSession().downloadTaskWithRequest(downloadRequest) (location, response, error) in
guard let tempLocation = location where error == nil else return
let documentDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first
let fullURL = documentDirectory?.URLByAppendingPathComponent((response?.suggestedFilename)!)
do
try NSFileManager.defaultManager().moveItemAtURL(tempLocation, toURL: fullURL!)
catch NSCocoaError.FileReadNoSuchFileError
print("No such file")
catch
print("Error downloading file : \(error)")
.resume()
let stringURL = "https://wordpress.org/plugins/about/readme.txt"
let url = NSURL.init(string: stringURL)
downloadFile(url!)
【讨论】:
是Swift 3,我一会儿修改一下。 抱歉,我还没有迁移到 Swift 3,不幸的是我知道我应该迁移到 Swift 3。请保留 Swift 3 版本以备将来使用 :) 不需要我在这里找到 Swift 2.x 的实现 ***.com/a/29475376/1139044【参考方案2】:您应该先下载它,然后将其保存到本地文件中。
代码示例可以在这里找到:(使用AFNetworking
)
How I properly setup an AFNetworking Get Request?
【讨论】:
有什么 swift 相关的吗? 这只是一段简单的代码。你可以很容易地把它翻译成 Swift。 还有什么不需要导入外部库的?在纯 Swift with Apple 框架中不存在简单的方法吗? 使用 contentOfUrl 获取远程文件很简单。但是如果你想要异步,你可以使用 NSURLsession。以上是关于如何快速复制文档目录中的远程服务器文件的主要内容,如果未能解决你的问题,请参考以下文章