问题陈述:
我想将大型二进制文件(例如音频剪辑)从 iOS 应用程序上传到 S3,并且我想让应用程序对断开连接(或低连接性)的处理尽可能稳健,最好通过将二进制文件作为一系列 block 上传。
不幸的是,AWSiOS SDK 和 ASI 的 S3 框架似乎都不支持分段上传,或者表示他们计划添加支持。我意识到我可以使用 beginBackgroundTaskWithExpirationHandler:
启动“较长”的上传,这会给我一个完成上传的时间窗口(我相信目前是 600 秒),但是如果我无法在该时间范围内完成上述上传?
除了担心在该时间范围内完成任务之外,它们是否是应用程序应如何恢复上传或什至只是将较大的上传分成较小的 block 的“最佳实践”?
我考虑过编写一个库来与 S3 的 REST API 对话,专门用于分段上传,但这似乎是一个其他已经解决或意识到不需要解决的问题(也许是完全合适的对于平台)。
另一种(过于复杂的)解决方案是在设备上对文件进行分块,将这些文件上传到 S3(或其他地方),然后通过服务器进程在 S3 上重新组装它们。这似乎比滚动我自己的库进行多部分上传更令人不快。
其他人是如何处理这个问题的?
最佳答案
显然我正在查看一些严重过时的文档。
在 AmazonS3Client
中查看:
- (S3MultipartUpload * AmazonS3Client)initiateMultipartUploadWithKey:(NSString *)theKey withBucket:(NSString *)theBucket
这将为您提供一个 S3MultipartUpload
,其中将包含一个 uploadId。
然后您可以使用 initWithMultipartUpload: (S3MultipartUpload *) multipartUpload
将 S3UploadPartRequest 放在一起并像往常一样发送。
S3UploadPartRequest 包含一个 int 属性 partNumber,您可以在其中指定要上传的部分 #。
关于ios - 为什么不支持在 iOS 上执行分段上传到 S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407750/