2016-08-05 8 views
0

Я знаю, как получить удаленный URL в SwiftКак скопировать файл удаленного сервера в каталоге документа в скор

let remoteURL = NSURL(string: "https://myserver/file.txt")! 

Я знаю, как получить локальный URL в Swift

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. 

Есть ли способ, как это сделать?

ответ

2

Вы можете использовать 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)!) 

Обновление: СВИФТ 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!) 
+0

это Swift 2.x? Это дает мне несколько ошибок ... – Nicholas

+0

Это Swift 3, я изменю его через минуту. – Khundragpan

+0

Извините, я не переехал в Swift 3, к сожалению, я знаю, что должен. Пожалуйста, сохраните версию Swift 3 на будущее :) – Nicholas

1

Необходимо сначала загрузить его, а затем сохранить его в локальном файле.

Пример кода можно найти здесь: (используя AFNetworking)

How I properly setup an AFNetworking Get Request?

+0

что-нибудь sw ift связаны? – Nicholas

+0

Это просто простой кусок кода. Вы можете легко перевести его в Swift. –

+0

что-нибудь еще без необходимости импортировать внешнюю библиотеку? Не существует простого способа в чистом Swift с каркасами Apple? – Nicholas