亚马逊iOS SDK S3上传多部分请求失败,带有神秘的URL

时间:2012-06-03 02:49:15

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

我的应用程序正在实施一种描述here的技术,以允许通过iPhone的3G连接进行多部分文件上传。我已设法将一个委托插入到操作中,我可以监视上传进度。但是,上传完成后,文件就不存在了。

深入挖掘,我发现了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对象最终从S3Request继承,它具有url属性。在以下行中,我记录了我的[filePath lastPathComponent]和url属性的值:

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

结果:

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

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

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

我正在使用当前(撰写本文时)1.3.0版本的SDK。

2 个答案:

答案 0 :(得分:1)

由于亚马逊AWS的支持,我设法解决了这个问题。完整的帖子是here,但这是后人的坚果。

事实证明,当您支持分段上传时,文件必须大于5MB,除了最后一部分。我假设第一部分也可能是最后一部分。所以现在我有一个简单的测试声明:小于5MB的文件将使用“Single Put Object Request”(根据我的问题中的链接)上传,而较大的文件将是multipart。像魅力一样。

答案 1 :(得分:0)

嗨,我发现你已经找到了答案,但是我希望为其他人提供一些额外的见解,让其他人能够将他们的AWS排在一起。

This post详细说明了上传和跟踪它们的一个过程。它还包含有关S3TransferManager如何处理线程的一些见解。相关地,AWS提供了两种将数据发布到s3的重要方法:upload:putObjectRequest:。方法upload:提供了在不停止UI的情况下上传多个文件/请求的功能。方法getObjectRequest:可以暂停您的UI并阻止另一个请求,直到传输完成。

再次只是为了增加对请求方法的理解以及S3TransferManager处理线程的方式。