3

我的应用程序正在实现此处描述的一种技术,以允许通过 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 对象最终继承自具有 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。

4

2 回答 2

1

感谢亚马逊 AWS 的支持,我设法解决了这个问题。完整的帖子在这里,但这是后代的坚果。

事实证明,当您支持分段上传时,文件必须大于 5MB,最后一部分除外。我认为第一部分也可能是最后一部分。所以现在我有一个简单的测试语句:小于 5MB 的文件将使用“Single Put Object Request”(根据我的问题中的链接)上传,而较大的文件将分成多部分。奇迹般有效。

于 2012-06-03T21:32:33.533 回答
0

嗨,我看到您已经找到了答案,但是我想为其他人提供一些额外的见解,让他们一起了解 AWS。

这篇文章详细介绍了上传和跟踪它们的一个过程。它还包含一些关于 S3TransferManager 如何处理线程的见解。相关地,AWS 提供了两种将数据发布到 s3 的重要方法:upload:putObjectRequest:. 该方法upload:提供了上传多个文件/请求而无需停止 UI 的能力。该方法getObjectRequest:可能会暂停您的 UI 并阻止另一个请求,直到传输完成。

再次只是为了增加对请求方法和 S3TransferManager 处理线程方式的额外见解。

于 2014-05-09T05:10:46.737 回答