1

Web サーバーは、ファイルが html フォーム経由でアップロードされることを想定しています。

これは、既に機能している MultipartEntity を構築する方法です。

FileBody filePart = new FileBody(new File("emptyFile.txt"), "text/plain");
FormBodyPart fbp = new FormBodyPart("UploadService", filePart);
MultipartEntity mpe = new MultipartEntity();  
mpe.addPart(fbp);

実際、私は自分のデータをメモリに持っているので、ディスクに保存するという考えが好きではないので、置き換えようとしました

FileBody filePart = new FileBody(new File("emptyFile.txt"), "text/plain");

StringBody filePart = new StringBody("");    

しかし、2 番目の方法は機能しません。サーバーは HTTP 500 例外を返します。ワイヤー上のデータをログに記録すると、唯一の違いは次のとおりであることに気付きました。

FileBody が使用された場合の HTTP POST トレース:

...
Content-Disposition: form-data; name="UploadService"; filename="emptyFile.txt"
...

StringBody が使用された場合の HTTP POST トレース:

...
Content-Disposition: form-data; name="UploadService"
...

つまり、FileBody アップロードでは、StringBody アップロードで指定されていない「ファイル名」が指定されています。どうすればこれを修正できますか?

4

2 に答える 2

1

ファイル名を設定することStringBodyはできません。ただし、 を返さないように拡張およびオーバーライドできます。StringBodygetFilename()null

のソースによるとFormBodyPart、これは必要な filename-parm パラメータを持つのに十分なはずです:

 protected void generateContentDisp(final ContentBody body) {
     StringBuilder buffer = new StringBuilder();
     buffer.append("form-data; name=\"");
     buffer.append(getName());
     buffer.append("\"");
     if (body.getFilename() != null) {
         buffer.append("; filename=\"");
         buffer.append(body.getFilename());
         buffer.append("\"");
     }
     addField(MIME.CONTENT_DISPOSITION, buffer.toString());
 }
于 2012-12-26T11:26:58.873 に答える