适用于iOS的AWS S3功能

时间:2017-01-17 17:35:00

标签: ios swift amazon-web-services amazon-s3

我决定利用Amazon S3上传文件,但我发现AWS Docs对于iOS平台的S3功能有点混乱。

我想了解我的应用在以下情况下的行为:

场景 1:在上传期间,用户意外丢失了互联网连接

场景2 :应用在上传期间崩溃

我听说iOS SDK会在可能的情况下通过恢复剩余的上传来解决这些问题,但我在文档中找不到相关信息。

AWSS3框架是否涵盖了这两种情况?它是否需要任何额外的代码行才能避免潜在的崩溃和网络错误?

我找到了一些relevant informations for Android platform

我很想知道我对以下代码的期望是什么

let image = UIImage(named: "12.jpeg")
let fileManager = FileManager.default
let imageData = UIImageJPEGRepresentation(image!, 0.99)
let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("\(imageData!).jpeg")

fileManager.createFile(atPath: path as String, contents: imageData, attributes: nil)

let fileUrl = NSURL(fileURLWithPath: path)
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest?.bucket = "bucketname"
uploadRequest?.key = "folder/12.jpeg"
uploadRequest?.contentType = "image/jpeg"
uploadRequest?.body = fileUrl as URL!
uploadRequest?.serverSideEncryption = AWSS3ServerSideEncryption.awsKms
uploadRequest?.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in
    DispatchQueue.main.async(execute: {

        print("bytes sent \(bytesSent), total bytes sent \(totalBytesSent), of total \(totalBytesExpectedToSend)")

    })
}

let transferManager = AWSS3TransferManager.default()
transferManager?.upload(uploadRequest).continue(with: AWSExecutor.mainThread(), withSuccessBlock: { (taskk: AWSTask) -> Any? in
    if taskk.error != nil {
        // Error.
    } else {
        // Do something with your result.
    }
    return nil
})

它已经崩溃/网络证明了吗?

修改

这是对我来说含糊不清的文档的一部分:

  

S3提供了一个分段上传功能,可让您上传单个内容   对象作为一组部件。每个部分都是一个连续的部分   对象的数据,对象部分独立上传   任何订单。如果任何部分的传输失败,您可以重新传输   部分不影响其他部分。在对象的所有部分之后   上传后,S3组装这些部件并创建对象。

这是否意味着它有自己的内在机制来管理它?假设我在上传文件时杀了应用程序,当我重新启动它并重新开始上传过程时,它会在我杀死应用程序之前从最后一个块停止吗?

0 个答案:

没有答案