【问题标题】:Swift UIDocumentPickerViewController document upload into AWS S3Swift UIDocumentPickerViewController 文档上传到 AWS S3
【发布时间】:2018-08-13 18:31:15
【问题描述】:

UIDocumentPickerViewController 在 TransferUtility 的帮助下选择一些文档并上传到 AWS S3。在这里,在上传时,我需要在 tableview 单元格中显示上传文件名、状态(progressive loader %)、大小。如果我上传多个文件 tableview 单元格需要显示多个具有加载状态的单元格。

问题:

  1. 我已经完成 UIDocumentPickerViewController 来挑选一些文档并获取这些文档的 URL、名称、大小等。但我不知道如何使用(或)将这些值传递到上传部分。

    // MARK - File Storage Access
    public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
    
        let fileurl: URL = url as URL
        let filename = url.lastPathComponent
        let fileextension = url.pathExtension
        let filedata = url.dataRepresentation
        print("DATA: \(filedata)","URL: \(fileurl)", "NAME: \(filename)", "EXTENSION: \(fileextension)")}
    

    //需要存储上面的值并用在下面的函数中

  2. 下面上传部分如何与 tableview 单元格交互。


transferUtility.uploadData(data,bucket: S3BucketName,key: name,contentType: "text/plain",expression: expression,completionHandler: completionHandler).continueWith { (task) -> AnyObject? in
    if let error = task.error {
        print("Error: \(error.localizedDescription)")
        DispatchQueue.main.async {
            cells.statusLabel_util.text = "Failed"
            print("Failed")
        }
    }

    if let _ = task.result {

        DispatchQueue.main.async {
            print("Upload Starting!")
        }
        // Do something with uploadTask.
    }
    return nil;
}

【问题讨论】:

标签: ios swift amazon-web-services tableview


【解决方案1】:

您可以使用此代码上传文件并跟踪进度

if let uploadRequest = AWSS3TransferManagerUploadRequest(){

            uploadRequest.bucket = "your bucket"
            uploadRequest.key = fileName
            //uploadRequest.acl = AWSS3ObjectCannedACL.publicRead
            uploadRequest.body = fileUrl

            uploadRequest.uploadProgress = {(bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in
                DispatchQueue.main.async(execute: {() -> Void in
                    //Update progress
                })
            }

if let transferManager = AWSS3TransferManager.default(){

            transferManager.upload(uploadRequest).continue(with: AWSExecutor.mainThread(), with: { (task) -> Any? in

                if let error = task.error as NSError? {

                    if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) {
                        switch code {
                        case .cancelled, .paused:

                            break
                        default:

                            break
                            //print("Error uploading: \(uploadRequest?.key) Error: \(error)")
                        }
                    } else {
                        //print("Error uploading: \(uploadRequest?.key) Error: \(error)")
                    }
                    return nil
                }

                return nil
            })
          }

        }

【讨论】:

  • 谢谢@snake_plissken,顺便说一句,我已经完成了上传部分,但我需要知道如何使用文件名和按钮显示 tableview 上传进度。你能告诉我你的想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2018-09-30
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多