Как мы можем загрузить несколько файлов документов в Google Drive API - PullRequest
0 голосов
/ 08 октября 2018

Я хочу загрузить несколько файлов документов (например, PDF, текст и т. Д.). Я могу загрузить один файл на диск.ниже мой код для загрузки одного файла на диск.Я использовал Контроллер выбора документов.

public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {


    if let documentsDir = url as URL? {

        print("import result : \(documentsDir)")

        let indexFileName = (documentsDir.pathComponents.last)!
        print("THE FILE NAME", indexFileName)

        let testFilePath = documentsDir.appendingPathComponent("").path

        drive?.uploadFile("FolderNameOnDrive", filePath: testFilePath, MIMEType: "image/pdf") { (fileID, error) in
            print("Upload file ID: \(String(describing: fileID)); Error: \(String(describing: error?.localizedDescription))")

            print("THE FILE ID IS",fileID ?? "")
            print("The test File Path", testFilePath)
        }
    }

}

testFilePath - это путь к документу из каталога документов, который позволяет пользователю выбрать файл.

Я включил documentPicker.allowsMultipleSelection = true.Но все равно застрял в многократной загрузке.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Переопределить didPickDocumentsAt вместо didPickDocumentAt.Обратите внимание на множественное число.

0 голосов
/ 08 октября 2018

Вы можете просто загрузить по одному и использовать DispatchGroup, чтобы получить завершение, когда все файлы загружены:

struct File {
        let name: String
        let path: URL
        let MIMEType: String
    }

let uploadGroup = DispatchGroup()
var drives = [Drive]()

func upload(files: [File], completion: () -> Void){
    let drive = Drive()
    drives.append(drive)
    for file in files {
        uploadGroup.enter()
        drive.uploadFile(file.name, filePath: file.path, MIMEType: file.MIMEType) { (fileID, error) in
            guard error == nil else {
                print("error: \(error)")
                uploadGroup.leave()
            }

            print("uploaded: \(fileID)")
            uploadGroup.leave()
        }
    }

        uploadGroup.notify(queue: DispatchQueue.main) {
            completion()
        }
}

PS Но вам нужно переделать свой класс загрузчика для нескольких загрузок или создать новый экземпляр для каждогозагрузить как в моем примере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...