署名付き URL を使用して、iOS アプリから AWS S3 バケットにファイルをアップロードしたいと考えています。コマンド ラインで curl を使用するため、URL は正しいです。
curl -v -k --upload-file FILENAME "https://MYBUCKET.amazonaws.com:443/KEYNAME?Signature=...&Expires=1391691489&AWSAccessKeyId=..."
次のObjective-Cコードで...
- (void)upload:(NSString *)url fileData:(NSData *)fileData
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"PUT"];
[request setHTTPBody:fileData];
[request setValue:[NSString stringWithFormat:@"%d", [fileData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"audio/mpeg" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"public-read" forHTTPHeaderField:@"x-amz-acl"];
[request setValue:@"iPhone-OS/6.0 fr_FR NE" forHTTPHeaderField:@"User-Agent"];
_connection = [NSURLConnection connectionWithRequest:request delegate:self];
[_connection start];
}
...次のエラーが表示されます。
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x9c49560 {NSErrorFailingURLStringKey=https://MYBUCKET.s3.amazonaws.com:443/KEYNAME?Signature=...&Expires=1391703958&AWSAccessKeyId=..., NSErrorFailingURLKey=https://MYBUCKET.amazonaws.com:443/KEYNAME?Signature=...&Expires=1391703958&AWSAccessKeyId=..., NSLocalizedDescription=The request timed out., NSUnderlyingError=0x9c48c80 "The request timed out."}
WireShark を使用して、トラフィックがあるかどうか、トラフィックが多いかどうかを確認しました。
コードの何が問題なのかわかりません。ファイル転送が正しく終了していないようです。