Как скачать файл с SwiftyDropbox? Ошибка с путем

Я пытаюсь загрузить файл с SwiftyDropbox, но у меня проблемы с путем. У меня есть файл в mi Dropbox "prueba.txt":

Файл Dropbox

И это код, который я использую для загрузки в моем приложении.

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
Другие вопросы по тегам