【问题标题】:AFNetworking POST to Amazon S3AFNetworking POST 到 Amazon S3
【发布时间】:2013-12-27 18:16:23
【问题描述】:

我正在拼命尝试从 iPhone 的图片库将图片上传到 Amazon S3。我在这里尝试了解决方案:

Amazon S3 POST upload in iOS

但无济于事。从那时起,我将我的代码调整为以下内容:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:[uploadResult objectForKey:@"url"]]];
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST"
                                                                     path:nil
                                                               parameters:nil // amazonDictionary
                                                constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
                                                    /*
                                                    [formData appendPartWithFileData:UIImageJPEGRepresentation(selectedImageView.image, .9) // (selectedImageView.image)
                                                                                name:@"file" // N.B.! To post to S3 name should be "file", not real file name
                                                                            fileName:@"filename.jpg"
                                                                            mimeType:@"image/jpeg"];
                                                     */


                                                    [formData appendPartWithFormData:[[uploadResult objectForKey:@"s3Key"] dataUsingEncoding:NSUTF8StringEncoding] name:@"AWSAccessKeyId"];
                                                    [formData appendPartWithFormData:[[uploadResult objectForKey:@"s3PolicyBase64"] dataUsingEncoding:NSUTF8StringEncoding] name:@"Policy"];
                                                    [formData appendPartWithFormData:[[uploadResult objectForKey:@"s3Signature"] dataUsingEncoding:NSUTF8StringEncoding] name:@"Signature"];
                                                    [formData appendPartWithFormData:[@"image.jpg" dataUsingEncoding:NSUTF8StringEncoding] name:@"key"];
                                                    [formData appendPartWithFormData:[@"image/jpeg" dataUsingEncoding:NSUTF8StringEncoding] name:@"Content-Type"];
                                                    [formData appendPartWithFormData:[@"public-read" dataUsingEncoding:NSUTF8StringEncoding] name:@"acl"];
                                                    [formData appendPartWithFormData:UIImageJPEGRepresentation(selectedImageView.image, .9) name:@"file"];


                                                }];

为了清楚起见,我提供的用于初始化 AFHTTPClient 的基本 URL 是表单的 URL

“http://”+存储桶+“.s3.amazonaws.com”

目前,我收到“无效策略:无效 JSON”错误。当我解析 S3 提供的 XML 时。非常感谢帮助解决此问题。

我应该指出,我在一个 webapp 上有以下代码可以上传图片:

var fd = new FormData();
fd.append("AWSAccessKeyId", data.s3Key);
fd.append("Policy", data.s3PolicyBase64);
fd.append("Signature", data.s3Signature);
fd.append("key", file.name);
fd.append("acl", "public-read");
fd.append("Content-Type", file.type);
fd.append("file", file);

$http({
    method: 'POST',
    url: data.url,
    data: fd,
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined}
})

【问题讨论】:

    标签: ios amazon-web-services http-post afnetworking


    【解决方案1】:

    我收到“无效策略:无效 JSON”错误。当我解析 XML 时

    听起来您正在尝试使用 AFNetworking JSON 处理程序而不是您自己的 XML 处理程序。如果响应是 XML,则不能使用 AFNetworking 内置的 JSON 解析器,您必须自己解析返回的 NSData。

    更新

    您是否尝试过使用 HTTPScoop 之类的工具检查发出的 POST json?也许它实际上是畸形的,并且不像亚马逊所期望的那样。

    【讨论】:

    • 当我去处理来自 S3 的响应时,我使用 AFXMLRequestOperation 如下:AFXMLRequestOperation * operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser ) { NSLog(@"XML 成功"); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) { NSLog(@"XML failed with error: %@",error); }];对不起,我的评论是史诗般的失败。我是新来的。 S3 在 XML 中传达这些错误,这就是我使用 XML 解析的原因。
    • “无效策略:无效 JSON”不是 AFNetworking 错误,而是 S3 错误。我认为 OP 没有使用 AFNetworking JSON 处理程序。
    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2013-01-28
    • 2019-12-02
    • 2011-07-05
    • 2012-08-26
    相关资源
    最近更新 更多