0

圧縮データとテキストを Web サーバー上の perl プログラムに投稿しようとしていますが、ヘッダーを octet-stream から multipart/form-data に変更できません。

私のコードは次のとおりです:-

HttpClient httpclient = new DefaultHttpClient();
String url = "http://webaddress/perl.pl";
HttpPost httppost = new HttpPost(url);
httppost.setHeader("Content-Type","multipart/form-data");
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

try {

    entity.addPart("mtdata",new ByteArrayBody(data, file.getLastPathSegment()));
    entity.addPart("email", new StringBody(strUserName));
    entity.addPart("mtfilename", new StringBody(file.getLastPathSegment()));
    httppost.setEntity(entity);

    HttpResponse httpresponse = httpclient.execute(httppost);
    HttpEntity resEntity = httpresponse.getEntity();

    response = EntityUtils.toString(resEntity);
} 

受信される生データは次のとおりです:-

Buffer = --FfT4ZNRUCPw6yONkpSsXNkA3WA2l6fvy53
Content-Disposition: form-data; name="mtdata"; filename="filename"
Content-Type: application/octet-stream             <<=== cannot change this

... Some binary data ...

私は何を間違っていますか?

4

2 に答える 2

1

最終的に、最善の方法は、それをファイルとして保存し、Content-Type を明示的に示す FileBody を使用して MultipartEntity を使用してファイルを投稿することであることがわかりました。

私が使用したコードは次のとおりです。

pairs.addPart("File", new FileBody(fout,"multipart/form-data"));

余談ですが、圧縮されていないファイル名を追加するには、GZIPOutputStream ではなく ZipOutputStream を使用する必要があることもわかりました。

そのためのコードは次のとおりです:-

data = bos.toByteArray();

OutputStream fos = new FileOutputStream(extStorageDirectory +  newfilename);
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));
try {
    ZipEntry entry = new ZipEntry(file.getLastPathSegment());
    zos.putNextEntry(entry);
    zos.write(data);
    zos.closeEntry();
}
finally {
    zos.close();
}
fos.close();
于 2013-03-18T21:17:41.473 に答える
0

挿入してみる

httppost.addHeader("Content-Type", "multipart/form-data");

そして取り除く

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
于 2013-03-17T16:09:57.283 に答える