파일의 ID를 전송하여 서버에서 파일을 다운로드하려고합니다. 몇 가지 시도했지만 파일이 CFNetworkDownload.tmp 파일로 다운로드되고 있습니다.요청 파일 다운로드가 작동하지 않는 Swift downloadTask
존재하는 파일로 저장하고 싶습니다. 파일 형식은 PNG, JPEG, PDF, DOCX, PPTX, XLSX가 될 수 있습니다. 많은 것을 시도했지만 헛된. 나는 그것이 내가 여기에서 이해하기 위해 놓치고있는 간단한 무엇이어야 할 것임에 틀림 없다라고 확신한다
시도해 보았다. 차이점은 대부분의 예에서 파일 이름은 URL에 있습니다. 하지만 ID를 보내고 응답으로 파일을 가져옵니다.
How To Download Multiple Files Sequentially using NSURLSession downloadTask in Swift
How to download file in swift?
다음은 내 코드입니다.func downloadFile(id : String, fileName : String) -> Void {
let session = URLSession.shared
let url = URL(string: qaDownloadURL+id)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
if let tempLocalUrl = tempLocalUrl, error == nil {
// Success
if let statusCode = (response as? HTTPURLResponse)?.statusCode {
print("Success: \(statusCode)")
}
do {
// let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
//
// self.savePath = documentsUrl!.absoluteString + "/" + fileName
//
// let fileURL = URL(fileURLWithPath: self.savePath)
//
// let dataFromURL = NSData(contentsOf: tempLocalUrl)
// dataFromURL?.write(to: fileURL, atomically: true)
var documentsDirectory: String?
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
if paths.count > 0
{
documentsDirectory = paths.first!
}
self.savePath = documentsDirectory!// + "/" + fileName
let fileURL = URL(fileURLWithPath: self.savePath)
let dataFromURL = NSData(contentsOf: tempLocalUrl)
dataFromURL?.write(to: fileURL, atomically: true)
// try FileManager.default.copyItem(at: tempLocalUrl, to: fileURL)
DispatchQueue.main.async {
let documentController = UIDocumentInteractionController.init(url: fileURL)
documentController.delegate = self
documentController.presentPreview(animated: true)
}
} catch (let writeError) {
print("error writing file \(self.savePath) : \(writeError)")
}
} else {
print("Failure: %@", error?.localizedDescription);
}
}
task.resume()
}
예 저는 그걸 또한 시도했습니다. 작동하지 않습니다 : ( –
문제는 "가져 오기"대신 "POST"방법을 사용하고 있습니다 .BTW는 URL 만 사용해야합니다. POST가 아닌 무언가를 얻고 싶을 때 URLRequest를 사용할 필요가 없습니다. –
BTW this 도움이됩니다 http://stackoverflow.com/a/27643660/2303865 –