为什么不支持在iOS上执行多部分上传到S3?

时间:2011-12-06 22:23:25

标签: ios cocoa-touch amazon-s3 amazon-web-services multipart

问题陈述:

我想将一个大型二进制文件(例如音频剪辑)从iOS应用程序上传到S3,我想让应用程序处理断开连接(或低连接性)尽可能强大,最好将二进制文件作为一系列块上传。

不幸的是,AWSiOS SDK和ASI的S3框架似乎都不支持多部分上传,或者表明他们计划添加支持。我意识到我可以使用beginBackgroundTaskWithExpirationHandler:启动“长期”上传,并且会给我一个时间窗口来完成上传(我相信目前是600秒),但如果我不是,那该怎么办呢?在这种情况下完成所述上传的情况?

除了担心在这段时间内完成任务之外,对于应用程序应该如何恢复上传,甚至只是将较大的上传内容分成较小的块,它们是“最佳做法”吗?

我已经考虑过编写一个库来与S3的REST API进行通信,专门用于多部分上传,但这似乎是一个问题,其他问题已经解决,或者实现不需要解决(也许是因为完全适当的对于平台)。

另一个(过于复杂的)解决方案是将设备上的文件分块,将其上传到S3(或其他地方)并通过服务器进程在S3上重新组装。这似乎比滚动我自己的库进行多部分上传更加难以接受。

其他人如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

显然我正在查看一些非常过时的文档。

AmazonS3Client中的

请参阅:

- (S3MultipartUpload * AmazonS3Client)initiateMultipartUploadWithKey:(NSString *)theKey withBucket:(NSString *)theBucket    

这将为您提供一个S3MultipartUpload,其中包含 uploadId

然后,您可以使用initWithMultipartUpload: (S3MultipartUpload *) multipartUpload将S3UploadPartRequest放在一起,并像往常一样发送。

S3UploadPartRequest包含一个int属性partNumber,您可以在其中指定要上传的部分#。

答案 1 :(得分:0)

您可以编写一些代码来执行此操作,您可以参考http://dextercoder.blogspot.in/2012/02/multipart-upload-to-amazon-s3-in-three.html中的代码。核心java代码,步骤可以用于iOS。