3

に書き込むレガシー アプリケーションをOutputStream持っています。このストリームの内容をファイルとしてサーブレットにアップロードしたいと考えています。JMeterを使用して、を使用するサーブレットをテストしましたが、commons-fileupload問題なく動作します。

File私は Apache HttpClient を使用しますが、出力ストリームだけでなく が必要です。ファイルをローカルに書き込むことができません。Fileおそらくそれが機能する可能性のあるメモリ内実装があれば?

(以下)を使用してみましHttpURLConnectionたが、サーバーは「MalformedStreamException: ストリームが予期せず終了しました」と応答します。

        URL url = new URL("http", "localhost", 8080, "/upload");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        String boundary = "---------------------------7d226f700d0";
        connection.setRequestProperty("Content-Disposition", "form-data; name=\"file\""); 
        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestMethod("POST");   
        connection.setChunkedStreamingMode(0);
        connection.connect();           

        OutputStream out = connection.getOutputStream();
        byte[] boundaryBytes =("--" + boundary + "\r\n").getBytes();
        out.write(boundaryBytes);


        //App writes to outputstream here

        out.write("\r\n".getBytes());
        out.write(("--"+boundary+"--").getBytes());
        out.write("\r\n".getBytes());

        out.flush();
        out.close();
        connection.disconnect();
4

1 に答える 1

1

PostMethod を使用すると、実装可能なインターフェースである RequestEntity を設定できますRequestEntity.writeRequestメソッドを適切に実装するだけです。

または、HttpClient にマルチパートのものを処理させたい場合は、カスタム パートで MultipartRequestEntity を使用できます。

于 2012-09-27T14:38:35.663 に答える