Android 无法使用http put将图像上载到amazon s3

Android 无法使用http put将图像上载到amazon s3,android,amazon-web-services,amazon-s3,Android,Amazon Web Services,Amazon S3,我正在开发一个Android应用程序,用户可以在其中创建带有图像的帖子。图像正在上传到AmazonS3。所以,如何让每个用户都可以上传一个图像,我不使用AmazonAWSSDK,因为它的方法需要密钥。我尝试使用HTTP put请求上传图像。我向后端发送第一个请求,它向我发送签名和其他用于上传图像的参数。不幸的是,来自amazon的第二个响应包含错误 以下是第一个请求和响应: POST /upload HTTP/1.1 Content-Type: application/x-www-form-ur

我正在开发一个Android应用程序,用户可以在其中创建带有图像的帖子。图像正在上传到AmazonS3。所以,如何让每个用户都可以上传一个图像,我不使用AmazonAWSSDK,因为它的方法需要密钥。我尝试使用HTTP put请求上传图像。我向后端发送第一个请求,它向我发送签名和其他用于上传图像的参数。不幸的是,来自amazon的第二个响应包含错误

以下是第一个请求和响应:

POST /upload HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 53
Host: wrum-wrum.ru
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

file_name=1439474973659_crp.jpg&file_type=image%2Fjpg


HTTP/1.1 200 OK
Server: nginx
Date: Thu, 13 Aug 2015 14:09:46 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: X-HTTP-Method-Override
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
set-cookie: connect.sid=s%3AY0SlTYzkavxu34-pcuMIEGDPuRSDlKuM.%2FTRySP3UVyIIatnqLSGE8%2Bx%2BP239TL9rjPQxjVRbzD8; Path=/; HttpOnly

11b
{"signed_request":"https://babadoo.s3.amazonaws.com/1439474973659_crp.jpg?AWSAccessKeyId=AKIAJMXM46BCWD5WDGTQ&Content-Type=image%2Fjpg&Expires=1439475046&Signature=ZsqF%2BaCCeZmTTPkiTWLG5Ckix1U%3D&x-amz-acl=public-read","url":"https://babadoo.s3.amazonaws.com/1439474973659_crp.jpg"}
0
PUT /1439474973659_crp.jpg?AWSAccessKeyId=AKIAJMXM46BCWD5WDGTQ&Content-Type=image%2Fjpg&Expires=1439475046&Signature=ZsqF%2BaCCeZmTTPkiTWLG5Ckix1U%3D&x-amz-acl=public-read HTTP/1.1
Content-Type: image/jpeg
User-Agent: Apache-HttpClient/UNAVALIABLE (java 1.4)
Content-Length: 1242599
Host: babadoo.s3.amazonaws.com
Connection: Keep-Alive
Expect: 100-continue

HTTP/1.1 403 Forbidden
x-amz-request-id: 36D4D3E461AF0850
x-amz-id-2:     +/LpGcZD6ZMdbZDq31Zt5ablP5CZIbBElaD1pm6of7MrndAwXe6ortO3uJNVgn8sGQ03o2waie0=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Thu, 13 Aug 2015 14:10:00 GMT
Connection: close
Server: AmazonS3

357
<?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><AWSAccessKeyId>AKIAJMXM46BCWD5WDGTQ</AWSAccessKeyId><StringToSign>PUT

image/jpeg
1439475046
x-amz-acl:public-read
/babadoo/1439474973659_crp.jpg</StringToSign><SignatureProvided>ZsqF+aCCeZmTTPkiTWLG5Ckix1U=</SignatureProvided><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 6a 70 65 67 0a 31 34 33 39 34 37 35 30 34 36 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 62 61 62 61 64 6f 6f 2f 31 34 33 39 34 37 34 39 37 33 36 35 39 5f 63 72 70 2e 6a 70 67</StringToSignBytes><RequestId>36D4D3E461AF0850</RequestId><HostId>+/LpGcZD6ZMdbZDq31Zt5ablP5CZIbBElaD1pm6of7MrndAwXe6ortO3uJNVgn8sGQ03o2waie0=</HostId></Error>
0
以下是第二个请求和响应:

POST /upload HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 53
Host: wrum-wrum.ru
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

file_name=1439474973659_crp.jpg&file_type=image%2Fjpg


HTTP/1.1 200 OK
Server: nginx
Date: Thu, 13 Aug 2015 14:09:46 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
Vary: X-HTTP-Method-Override
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
set-cookie: connect.sid=s%3AY0SlTYzkavxu34-pcuMIEGDPuRSDlKuM.%2FTRySP3UVyIIatnqLSGE8%2Bx%2BP239TL9rjPQxjVRbzD8; Path=/; HttpOnly

11b
{"signed_request":"https://babadoo.s3.amazonaws.com/1439474973659_crp.jpg?AWSAccessKeyId=AKIAJMXM46BCWD5WDGTQ&Content-Type=image%2Fjpg&Expires=1439475046&Signature=ZsqF%2BaCCeZmTTPkiTWLG5Ckix1U%3D&x-amz-acl=public-read","url":"https://babadoo.s3.amazonaws.com/1439474973659_crp.jpg"}
0
PUT /1439474973659_crp.jpg?AWSAccessKeyId=AKIAJMXM46BCWD5WDGTQ&Content-Type=image%2Fjpg&Expires=1439475046&Signature=ZsqF%2BaCCeZmTTPkiTWLG5Ckix1U%3D&x-amz-acl=public-read HTTP/1.1
Content-Type: image/jpeg
User-Agent: Apache-HttpClient/UNAVALIABLE (java 1.4)
Content-Length: 1242599
Host: babadoo.s3.amazonaws.com
Connection: Keep-Alive
Expect: 100-continue

HTTP/1.1 403 Forbidden
x-amz-request-id: 36D4D3E461AF0850
x-amz-id-2:     +/LpGcZD6ZMdbZDq31Zt5ablP5CZIbBElaD1pm6of7MrndAwXe6ortO3uJNVgn8sGQ03o2waie0=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Thu, 13 Aug 2015 14:10:00 GMT
Connection: close
Server: AmazonS3

357
<?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><AWSAccessKeyId>AKIAJMXM46BCWD5WDGTQ</AWSAccessKeyId><StringToSign>PUT

image/jpeg
1439475046
x-amz-acl:public-read
/babadoo/1439474973659_crp.jpg</StringToSign><SignatureProvided>ZsqF+aCCeZmTTPkiTWLG5Ckix1U=</SignatureProvided><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 6a 70 65 67 0a 31 34 33 39 34 37 35 30 34 36 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 62 61 62 61 64 6f 6f 2f 31 34 33 39 34 37 34 39 37 33 36 35 39 5f 63 72 70 2e 6a 70 67</StringToSignBytes><RequestId>36D4D3E461AF0850</RequestId><HostId>+/LpGcZD6ZMdbZDq31Zt5ablP5CZIbBElaD1pm6of7MrndAwXe6ortO3uJNVgn8sGQ03o2waie0=</HostId></Error>
0
代码:

公共字符串上传照片(最终文件){
Runnable Runnable=新的Runnable(){
公开募捐{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(上传URL);
setHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
字符串结果=null;
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“文件名”,file.getName());
添加(新的BasicNameValuePair(“文件类型”、“图像/jpg”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
HttpEntity HttpEntity=response.getEntity();
结果=EntityUtils.toString(httpEntity);
int i=1;
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
如果(结果!=null){
int putURLpos=result.indexOf(parseStringFragment);
如果(putURLpos!=-1){
putURL=result.substring(putURLpos+parseStringFragment.length(),
result.indexOf(“\”,putURLpos+parseStringFragment.length());
试一试{
KeyStore trustStore=KeyStore.getInstance(KeyStore.getDefaultType());
load(null,null);
sslssocketfactory sf=(新的mysslssocketfactory(信任商店));
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
BasicHttpParams httpParams=新的BasicHttpParams();
HttpProtocolParams.setVersion(httpParams,HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(httpParams,HTTP.DEFAULT\u CONTENT\u CHARSET);
setUseExpectContinue(httpParams,true);
SchemeRegistry sr=新SchemeRegistry();
sr.register(新方案(“http”,PlainSocketFactory.getSocketFactory(),80));
高级注册主任(新计划(“https”,sf,443));
ThreadSafeClientConnManager ccManager=新的ThreadSafeClientConnManager(httpParams,sr);
HttpClient客户端=新的默认HttpClient(ccManager,httpParams);
URI=新的URI(putURL);
HttpPut=新的HttpPut(uri);
put.setHeader(“内容类型”、“图像/jpeg”);
setHeader(“用户代理”,“ApacheHttpClient/unavailable(Java1.4)”;
EntityBuilder eb=EntityBuilder.create();
eb.setFile(文件);
put.setEntity(eb.build());
HttpResponse response=client.execute(put);
HttpEntity当前性=response.getEntity();
String res=EntityUtils.toString(resEntity);
int i=1;
i++;
}捕获(例外e){
e、 printStackTrace();
}
}
}
}
};
线程线程=新线程(可运行);
thread.start();
试一试{
thread.join();
}捕捉(中断异常e){
e、 printStackTrace();
}
返回上传的photourl;
}

所以我找到了解决办法。这是我的错,我发送了

nameValuePairs.add(new BasicNameValuePair("file_type", "image/jpg"));
对于第一个请求,以及

Content-Type: image/jpeg

在第二个请求中。

因此我找到了解决方案。这是我的错,我发送了

nameValuePairs.add(new BasicNameValuePair("file_type", "image/jpg"));
对于第一个请求,以及

Content-Type: image/jpeg
在第二个请求中。

可能有帮助,请将请求和响应作为问题的一部分(而不是链接)。可能有帮助,请将请求和响应作为问题的一部分(而不是链接)。