s3 Signing and Authenticationを使用して、モバイルクライアントで動作するシンガチュアを生成しています。
私の元のクラスは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」を次のように置き換えます
Content-Type:multipart / form-data; border = Boundary + 0xAbCdEfGbOuNdArY
署名されたメッセージと一致しないため、ファイルをアップロードすることは無効です。
さらにグーグルした後、inputstreamメソッドを見つけました
NSData *imageData = UIImageJPEGRepresentation(uploadImage, 0.5f);
NSInputStream *stream = [[NSInputStream alloc]initWithData:imageData];
operation.inputStream = stream;
このとき、AFNetworkingは
Transfer-Encoding:Chunked
およびs3は、「指定したヘッダーは実装されていない機能を意味します」というエラーに応答します。
更新:回避策として、元のコンテンツヘッダーを置き換える行にコメントを付けるだけです。