次のコードを使用して、Android アプリから場所に zip ファイルをアップロードしています。観察事項: 1. サーバーにアップロードされた zip ファイルが Windows エクスプローラーで開かない。2. Winzip、7-zip、およびその他のツールは、サーバーにアップロードされた zip を開くことができます。3. Android デバイスから (adb 経由で) 直接取得したファイルは、Windows エクスプローラーで開くことができます。(破損していないことを意味します)。
アップロードされた zip の 16 進ダンプを分析したところ、先頭に http ヘッダーが含まれていることがわかりました。ヘッダーを手動で削除して再保存すると、ジョブが実行されます。本文で送信されているか、ヘッダー セクション全体が本文の一部として誤って解釈されているようです。これらのヘッダーはサーバー スクリプトで必要とされるため、避けることはできません。
ありがとう
サーバーでのファイルの 16 進数: -B8m4yaqs_DBT3duNEuQUqEqqIdnyHYXEtwW Content-Disposition: form-data; 名前="ファイルアップロード"; filename="crashLogs.ZIP" Content-Type: application/zip Content-Transfer-Encoding: バイナリ
ヘッダーを保存せずに Zip ファイルをアップロードするにはどうすればよいですか?
HttpClient httpclient = new DefaultHttpClient();
HttpPost postRequest;
MultipartEntity reqEntity;
FileBody fileBody;
postRequest = new HttpPost(serverUrl);
postRequest.addHeader("Content-Type", "application/zip");
postRequest
.addHeader(
"X-BRB-Custom",
"veT14BAttolUAgiosgaultfOrTH93TAD30sag48feYbUlk45COInneBcaDegEARhowOfAYs10HELpsmump23");
File zipFile = new File(Zip);
try
{
reqEntity = new MultipartEntity();
fileBody = new FileBody(zipFile, "application/zip");
reqEntity.addPart("fileupload", fileBody);
postRequest.setEntity(reqEntity);
HttpResponse response = httpclient.execute(postRequest);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
httpclient.getConnectionManager().shutdown();
return deleteFiles();
}
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
return false;