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查看是否有任何流量,并且流量很大.
我不知道我的代码有什么问题.似乎文件传输没有正确终止.
解决方法 我自己解决了这个问题Content-Type标头是罪魁祸首.在绝望中,我用一个非常小的文本文件测试了我的代码,并从S3获得了403作为http状态代码.没有超时.这样的进步.我还收到了一条非常丰富的错误消息:<?xml version="1.0" enCoding="UTF-8"?><Error> <Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provIDed. Check your key and signing method.</Message><StringToSignBytes>...</StringToSignBytes><RequestID>...</RequestID><HostID>...</HostID><SignatureProvIDed>...</SignatureProvIDed> <StringToSign>PUT text/plain 1391784394 KEYname</StringToSign> <AWSAccessKeyID>...</AWSAccessKeyID></Error>
显然,如果从客户端提供内容类型字符串(在本例中为text / plain),则在字符串到符号中是预期的.不要问我为什么这会导致大(5.5MB?)文件超时.我希望这能为其他人节省几个小时的生命.
最简单的解决方法是删除该行
[request setValue:@"..." forhttpheaderFIEld:@"Content-Type"];
如果您在创建预签名URL时知道内容类型,则可以将字符串添加到字符串到符号.
总结以上是内存溢出为你收集整理的ios – 使用预签名URL将文件上传到AWS S3的代码有什么问题?全部内容,希望文章能够帮你解决ios – 使用预签名URL将文件上传到AWS S3的代码有什么问题?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)