Как скачать файл с SwiftyDropbox? Ошибка с путем
Я пытаюсь загрузить файл с SwiftyDropbox, но у меня проблемы с путем. У меня есть файл в mi Dropbox "prueba.txt":
И это код, который я использую для загрузки в моем приложении.
import UIKit
import SwiftyDropbox
let clientDB = DropboxClientsManager.authorizedClient
class Controller: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
DropboxClientsManager.authorizeFromController(UIApplication.shared, controller: self, openURL: {
(url: URL) -> Void in UIApplication.shared.open(url)
})
let fileManager = FileManager.default
let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let destURL = directoryURL.appendingPathComponent("/test.txt")
let destination: (URL, HTTPURLResponse) -> URL = { temporaryURL, response in
return destURL
}
clientDB?.files.download(path: "/prueba.txt", overwrite: true, destination: destination)
.response{ response, error in
if response != nil{
self.cargarDatosCliente()
//print (response)
} else if let error = error{
print (error)
}
}
.progress{ progressData in
print(progressData)
}
}
}
Я пробую разными способами, но всегда получаю одну и ту же проблему с "путем", всегда ошибка path/not_found/...
Я пытаюсь с другим путем, но это та же проблема. Не могли бы вы помочь мне? Где моя ошибка?
Спасибо!
1 ответ
Если вы получаете метаданные о файлах из API, это будет свойство pathLower объекта FileMetadata.
client?.files.download(path: fileMetadata.pathLower!, overwrite: true, destination: destination)
.response { response, error in
if let response = response {
print(response)
} else if let error = error {
print(error)
}
}
Проблема в том, что "/prueba.txt" является локальным путем к файлу. Dropbox ожидает от вас указания пути к файлу для их удаленного сервера.
Вы можете получить их, используя listFolder и listFolderContinue.
Например, если вы хотите получить пути к файлам в корневой папке вашего приложения или в Dropbox, используйте:
var path = ""
clientDB?.files.listFolder(path: path).response(completionHandler: { response, error in
if let response = response {
let fileMetadata = response.entries
if response.hasMore {
// Store results found so far
// If there are more entries, you can use `listFolderContinue` to retrieve the rest.
} else {
// You have all information. You can use it to download files.
}
} else if let error = error {
// Handle errors
}
})
FileMetadata содержит нужный вам путь. Например, вы можете получить путь к первому файлу следующим образом:
let path = fileMetadata[0].pathDisplay