我决定利用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组装这些部件并创建对象。
这是否意味着它有自己的内在机制来管理它?假设我在上传文件时杀了应用程序,当我重新启动它并重新开始上传过程时,它会在我杀死应用程序之前从最后一个块停止吗?