【问题标题】:Amazon S3 POST upload in iOSiOS 中的 Amazon S3 POST 上传
【发布时间】:2013-01-28 02:07:00
【问题描述】:

我的服务器可以生成 AWSAccessKeyID、acl、策略、签名等参数,以便使用 POST 将文件上传到 S3,如下所示:http://doc.s3.amazonaws.com/proposals/post.html。 现在有了这些参数,我需要以某种方式在亚马逊服务器上运行这个请求。似乎我不能使用原生 AWS iOS SDK,因为它的 S3 客户端只能使用 AWS 密钥和秘密进行初始化,它们存储在服务器上而不是设备上。

使用 S3 上的所有参数调用此 POST 请求以上传文件的最佳方法是什么?或者也许有办法为此使用 AWS 开发工具包。

【问题讨论】:

  • 谢谢。我认为我的问题很愚蠢,我必须在问之前考虑一下。我设法使用 AFNetworking 上传文件。
  • 您应该发布自己的解决方案作为答案,以防其他人有同样的问题。

标签: ios post amazon-s3


【解决方案1】:

好的,如果它对某人有帮助,我设法做到了:

NSDictionary* parametersDictionary = @{@"AWSAccessKeyId" : @"YOUR_KEY",
                                                  @"acl" : @"public-read", // or whatever you need
                                                  @"key" : @"filename.ext", // file name on server, without leading /
                                               @"policy" : @"YOUR_POLICY_DOCUMENT_BASE64_ENCODED",
                                            @"signature" : @"YOUR_CALCULATED_SIGNATURE"
                                    };

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString: @"http://s3-bucket.s3.amazonaws.com"]];
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST"
                                                                     path:nil
                                                               parameters:parametersDictionary
                                                constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
                                                    [formData appendPartWithFileData:fileData
                                                                                name:@"file" //N.B.! To post to S3 name should be "file", not real file name
                                                                            fileName:@"your_filename"
                                                                            mimeType:@"mime/type"];
                                                }];
AFHTTPRequestOperation* operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

如果需要,您可以使用任何其他类型的操作,例如 AFXMLRequestOperation,因为 S3 以 XML 格式返回响应。

如果任何参数丢失或包含无效数据 - 请求将不被接受。

这是一个背景信息的链接:Browser Uploads to S3 using HTML POST Forms

【讨论】:

  • 我无法理解“政策”和“签名”部分,请您给我一个提示吗?
  • 你检查了我附加的链接吗?有一个表格说明了所有参数,包括策略和签名。
猜你喜欢
  • 2010-12-17
  • 1970-01-01
  • 2012-01-14
  • 2013-05-19
  • 2012-01-05
  • 2018-09-29
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多