承認を得て、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
チャンクエンコーディングに何か問題がありますか? 明らかな間違いはありますか?