java – Android HttpURLConnection PUT到亚马逊AWS S3 403错误

使用具有Signature,Expiration和AccessKey的预签名URL将文件上传到Amazon S3,使用以下代码我可以使用普通的java代码上传文件,但Android中的相同代码给出了403错误.使用Amazon SDK生成预先指定的URL

我看过http://developer.android.com/reference/java/net/HttpURLConnection.html
http://android-developers.blogspot.com/2011/09/androids-http-clients.html但不能弄清楚我应该使用什么标题参数,我想在android中它是在请求中设置标题哪个服务器拒绝

    HttpURLConnection connection=(HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("PUT"); 
    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
    out.write("This text uploaded as object.");
    out.close();
    int responseCode = connection.getResponseCode();

例外:403;签名不匹配:-o

有人遇到过这个问题吗?
或者更多详细信息,从android库中添加Header参数?

解决方法:

请设置如下内容类型:

connection.setRequestProperty("Content-Type"," ");

因为HttpsUrlConnection的默认值自动生成内容类型为:

"Content-Type: application/x-www-form-urlencoded"

这将导致签名不匹配.

上一篇:java – HttpURLConnection读取InputStream两次


下一篇:发布Google Maps API v2 Android的流媒体路线