ios - Amazon iOS SDK S3 上传分段请求因神秘 URL 失败

标签 ios sdk amazon-s3 amazon-web-services

我的应用程序正在实现一种描述为 here 的技术,以允许从 iPhone 通过 3G 连接进行分段文件上传。我也设法将委托(delegate)插入到操作中,并且我可以监控上传进度。但是,上传完成后,文件根本不存在。

深入挖掘后,我发现 SDK 中似乎存在格式错误的 URL。这是相关代码:

__strong AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:kS3Access withSecretKey:kS3Secret];
s3.timeout = 240;

s3ResponseHandler = [[S3ResponseHandler alloc] init];

S3InitiateMultipartUploadRequest *initReq = [[S3InitiateMultipartUploadRequest alloc] initWithKey:[filePath lastPathComponent] inBucket:kS3Bucket];

initReq 对象最终继承自具有 url 属性的 S3Request。在以下几行中,我记录了我的 [filePath lastPathComponent] 和该 url 属性的值:

NSLog(@"filePath lastComp: %@", [filePath lastPathComponent]);
NSLog(@"initReq URL: %@", [initReq url]);

结果:

filePath lastComp: filename.ext
initReq URL: https://<bucketname>.(null)/filename.ext

我认为 URL 应该是 https://bucketname.s3.amazonaws.com ,而不是 (null)。

如果这是 SDK 用于推送我的上传的 URL,那么它显然无法正常工作!谁能建议我可以采取哪些故障排除步骤来进一步诊断此问题和解决方法?这几乎感觉像是 SDK 中的一个错误,但我对自己的信任远不止于此。

我使用的是当前(截至撰写本文时)1.3.0 版本的 SDK。

最佳答案

感谢 Amazon AWS 的支持,我设法解决了这个问题。完整的帖子是here ,但这是留给子孙后代的坚果。

事实证明,当您支持分段上传时,文件必须大于 5MB,最后一部分除外。我假设第一部分也可能是最后一部分。所以现在我有一个简单的测试语句:小于 5MB 的文件将使用“单一放置对象请求”上传(根据我问题中的链接),而较大的文件将分为多个部分。就像一个魅力。

关于ios - Amazon iOS SDK S3 上传分段请求因神秘 URL 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867530/

相关文章:

ios - 我们如何将具有库的 sdk/Framework 共享给其他项目?

ios - Apple 是否规定 iOS 应用程序必须使用哪个 SDK 版本?

java - Amazon Cognito 使用用户名和密码登录用户

ios - 当用户点击 TableView 中的行时,如何更新 UITableViewCell(原型(prototype)单元格)中的标签?

android - 如何在 api 22 上运行 android gcm 示例?

amazon-web-services - 如何检查 S3 中文件夹的权限?

amazon-web-services - 如何将上传到 S3 存储桶的所有文件的访问级别设置为 "Public"?

ios - 辅助功能看不到 SWTableViewCell 的实用程序按钮

ios - 压缩文件以缩小 iOS 应用程序

amazon-web-services - 为什么 AWS Lambda 函数会为单个事件多次调用?