如何快速复制文档目录中的远程服务器文件

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。

以上是关于如何快速复制文档目录中的远程服务器文件的主要内容,如果未能解决你的问题,请参考以下文章

远程 Linux 服务器到远程 linux 服务器目录复制。如何? [关闭]

如何将文件从远程服务器复制到本地计算机? [关闭]

linux文件拷贝到其他机器

Linux服务器之间复制文件命令scp

Linux服务器之间复制文件命令scp.md

如何使用 SCP 或 SSH 将文件复制到 Python 中的远程服务器?