我想使用預先簽名的URL將文件從iOS應用上傳到AWS S3存儲桶。該URL是正確的,因爲它可以在命令行上使用curl。我的代碼使用預先簽名的URL將文件上傳到AWS S3有什麼問題?
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來看看是否有任何流量和有很多交通。
我不知道我的代碼有什麼問題。看來文件傳輸沒有正確終止。
該文件有多大,大致需要多長時間才能傳輸? –
這是5.5 MB。使用捲曲需要幾秒鐘上傳。我已經嘗試將超時設置爲120秒。但我仍然要求超時。 –
你的iOS設備連接什麼類型的連接? – duskwuff