S3 Utility Manager Upload File - не выдает ошибку при отсутствии сетевого подключения - PullRequest
0 голосов
/ 29 августа 2018

Я использую Utility Transfer для загрузки файлов в корзину S3. Я хочу, чтобы при попытке загрузить файл без сетевого подключения была напечатана ошибка. Вместо этого ошибки нет, и Utility Transfer просто пытается загрузить файл на неопределенный срок. Я оставил его как минимум на 2 минуты, и он продолжает пытаться без движения.

Я знаю, что некоторая обработка ошибок работает, потому что, когда я ввожу неправильное имя сегмента, эта ошибка печатается как ожидалось.

Ошибка: операция не может быть завершена. (com.amazonaws.AWSS3TransferUtilityErrorDomain ошибка 2.)

Возможно ли получить такую ​​ошибку, когда нет сетевого соединения или сетевое соединение обрывается?

Мой код выглядит следующим образом:

  func uploadData(fileUrl: URL, key: String, content: String, completion: @escaping(Int) -> ()) {

    var successCount = 0


    let expression = AWSS3TransferUtilityUploadExpression()
    expression.progressBlock = {(task, progress) in
        DispatchQueue.main.async(execute: {
            // Do something e.g. Update a progress bar.

        })
    }

    let transferUtility = AWSS3TransferUtility.default()

        transferUtility.uploadFile(fileUrl, bucket: "liopa-datacapture-ios", key: key, contentType: content, expression: expression) { (task, error) in

            if let error = error {
                print("Error: \(error.localizedDescription)")
                successCount = 0
                completion(successCount)
                return
            }

            print("Successfully uploaded")
            successCount = 1
            completion(successCount)
        }

}

Только в том случае, если это вызывает проблему, вот другая часть моего кода:

   func uploadFiles() {
    progressIndicator.startAnimating()
    // upload files to S3 bucket
    // video file
    group.enter()
    s3Bucket.uploadData(fileUrl: videoRecorder.outputFileLocation!, key: "ios-videos/\(userName)-\(device)/Block-\(blockNumber)/Session\(sessionNumber)_\(sessionTimestamp)/video-\(phraseNumber)/video-\(phraseNumber).mp4", content: "video") { (successCount) in
        self.successCounter += successCount
        print("1: \(self.successCounter)")
        self.group.leave()
    }
    // audio file
    group.enter()
    s3Bucket.uploadData(fileUrl: audioRecorder.outputAudioLocation, key: "ios-videos/\(userName)-\(device)/Block-\(blockNumber)/Session\(sessionNumber)_\(sessionTimestamp)/video-\(phraseNumber)/audio-\(phraseNumber).flac", content: "audio") { (successCount) in
        self.successCounter += successCount
        print("2: \(self.successCounter)")
        self.group.leave()
    }
    //facial landmark coordinates
    group.enter()
    s3Bucket.uploadData(fileUrl: createFacialLandmarksFile(), key: "ios-videos/\(userName)-\(device)/Block-\(blockNumber)/Session\(sessionNumber)_\(sessionTimestamp)/video-\(phraseNumber)/metadata/Phrase\(phraseNumber)-landmarks.txt", content: "text") { (successCount) in
        self.successCounter += successCount
        print("3: \(self.successCounter)")
        self.group.leave()
    }
}

group.notify(queue: DispatchQueue.main) {
            self.progressIndicator.stopAnimating()
            // if all the uploads have succeeded
            if self.successCounter == 3 {.......
...