1

我正在使用 s3签名和身份验证来生成与移动客户端一起使用的签名。

我原来的课程使用的是 ASIHTTPRequest,但我想将其转换为 AFNetworking。

通过使用 ASIHTTPRequest 将文件上传到 s3,可以很简单地设置一些特定于 s3 的标头并将图像作为请求包含在内

 [request setData:data withFileName:filename andContentType:"image/jpeg" forKey:key];

根据其他人的建议,我使用以下代码发送带有请求的图像

 NSURLRequest *request = [httpClient multipartFormRequestWithMethod:@"PUT" path:@"/johnsmith/photos/puppy.jpg" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"file" fileName:@"puppy.jpg" mimeType:@"image/jpeg"];
    }];

但是此请求将“Content-Type:image/jpeg”替换为

内容类型:multipart/form-data;边界=边界+0xAbCdEfGbOuNdArY

它与签名的消息不匹配,因此上传文件无效。

进一步谷歌搜索后,我找到了一个输入流方法

NSData *imageData = UIImageJPEGRepresentation(uploadImage, 0.5f);
NSInputStream *stream = [[NSInputStream alloc]initWithData:imageData];
operation.inputStream = stream;

这时,AFNetworking 生成一个

Transfer-Encoding:Chunked

并且 s3 响应错误说“您提供的标头暗示未实现的功能”

更新:对于解决方法,我只是评论替换我原来的 Content-header 的行。

4

0 回答 0