我正在使用以下代码将 zip 文件从 android 应用程序上传到某个位置。观察是: 1.服务器上传的zip文件没有用windows explorer打开。2. Winzip、7-zip等工具可以打开上传到服务器的zip。3.直接从安卓设备(通过adb)拉取的文件可以用windows explorer打开。(意味着它没有腐败)。
我分析了上传的 zip 的十六进制转储,发现它在开头包含 http 标头。手动删除标题并重新保存它就可以完成这项工作。看起来它们是在正文中发送的,或者整个标题部分被误解为正文的一部分。我无法避免这些标头,因为服务器脚本需要这些标头。
谢谢
服务器上文件的十六进制:-B8m4yaqs_DBT3duNEuQUqEqqIdnyHYXEtwW 内容处置:表单数据;名称="文件上传"; filename="crashLogs.ZIP" 内容类型:application/zip 内容传输编码:二进制
如何在不保存标题的情况下上传 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;