0

ByteArrayOutputStream を使用してアップロードを行いましたが、nio を使用して ServletInputStream からハードディスク内のファイルにイメージを書き込みたいと考えています。いくつかの方法を試しましたが、これまでのところうまくいきませんでした。

    @Override
public void doPost(final HttpServletRequest request, final HttpServletResponse response)

throws IOException, ServletException {

    final String fileName = "img_" + UUID.randomUUID().toString() + ".jpg";

    final String filePathName = "E:\\tmp\\" + fileName;

    final FileChannel outChannel = new FileOutputStream(filePathName).getChannel();

    final ReadableByteChannel inChannel = Channels.newChannel(request.getInputStream());


       outChannel.transferFrom(inChannel, 0, request.getContentLength());



    inChannel.close();
    outChannel.close();

}

指定されたファイルはオリジナルと同じサイズで生成されますが、開くことができません。私はここで何を間違えましたか?適切な方法は何ですか?

ありがとう。

4

1 に答える 1

0

「--」があなたに送信されていない限り、ファイルに入れられている理由はわかりませんがtransferFrom()、ループで呼び出す必要があります。ファイル全体が 1 回の呼び出しで転送されるとは限りません。各呼び出しで転送されたバイト数が返されるため、転送された合計数を追跡できます。完了している場合はブレークし、そうでない場合はそれをオフセットに追加し、長さから減算して繰り返します。

于 2012-09-10T02:13:13.173 に答える