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()循环调用。您不能假设在一次调用中传输了整个文件。它返回每次调用传输的字节数,因此您可以跟踪传输的总数:如果完成,则中断,否则将其添加到偏移量,从长度中减去,然后重复。

于 2012-09-10T02:13:13.173 回答