我正在尝试通过授权将文件上传到我的 Amazon S3 存储桶。我知道我的签名有效:使用与hurl.it相同的 url、标题和签名可以成功上传。
我也知道使用我的程序进行常规文件上传是有效的:如果我关闭 S3 安全性并删除标题,则上传工作正常。
HttpClient client = new DefaultHttpClient();
url = "http://mybucket.s3.amazonaws.com/test/" + filename;
HttpPut put = new HttpPut(url);
put.setEntity(entity);
put.addHeader("Date", formattedDate);
put.addHeader("Authorization",
"AWS " + c.getString(R.string.AWSAccessKeyId) +
":" + signature);
put.addHeader("Content-Type",contentType);
HttpResponse httpResponse = client.execute(put);
Log.e(TAG, allHeaders(httpResponse));
HttpEntity responseEntity = httpResponse.getEntity();
InputStream content = responseEntity.getContent();
InputStreamReader is = new InputStreamReader(content);
BufferedReader br = new BufferedReader(is,2000);
String read = br.readLine();
Log.e("AUTH", ">>>"+read+"<<<");
String response = "";
while (read != null){
Log.e("AUTH", read);
read = br.readLine();
response += read + "\n";
}
Log.e("Code:", ""+httpResponse.getStatusLine().getStatusCode());
还值得注意的是,我在 Android 模拟器上异步执行此操作。
生成的标题(使用 显示Log.e(TAG, allHeaders(httpResponse))
)是:
Date: Thu, 31 May 2012 05:58:08 GMT
Connection: close
Server: AmazonS3
Transfer-Encoding: chunked
响应状态码是400: Bad Request
。
所以奇怪的是我得到了这些标题,但是来自的内容流responseEntity.getContent()
完全是空的——我没有进入 while 循环。
我也尝试切换到有HttpGet
针对性的www.google.com
,这完全没问题。
我对分块编码做错了吗?有什么明显的错误吗?