我正在使用 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 的行。