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

如何使用JavaNIO从ServletInputStream写入上传的图像?,nio,Nio,我已经使用ByteArrayOutputStream完成了上传,现在我想使用nio将图像从ServletInputStream写入硬盘中的文件,我尝试了几种方法,但到目前为止运气不佳,现在我已经: @Override public void doPost(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { fin

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

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


谢谢。

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

对于模糊的描述,抱歉。当我打开上传的图像,它说这是一个无效的图像文件。GraphicsMagick说:不是JPEG文件:以0x2d 0x2d开头。