如何使用Java nio从ServletInputStream写入上传的图像?

时间:2012-09-05 02:02:49

标签: nio

我已经使用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();

}

生成的指定文件与原始文件大小相同,但无法打开。我在这做错了什么?什么是正确的方法?

感谢。

1 个答案:

答案 0 :(得分:0)

我不明白为什么' - '被放入文件中,除非它被发送给你,但你需要在循环中调用transferFrom()。您不能假设整个文件在一次通话中传输。它返回每次调用传输的字节数,因此您可以跟踪传输的总数:如果完成,则中断,否则将其添加到偏移量,从长度中减去,然后重复。