我已经使用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();
}
生成的指定文件与原始文件大小相同,但无法打开。我在这做错了什么?什么是正确的方法?
感谢。
答案 0 :(得分:0)
我不明白为什么' - '被放入文件中,除非它被发送给你,但你需要在循环中调用transferFrom()
。您不能假设整个文件在一次通话中传输。它返回每次调用传输的字节数,因此您可以跟踪传输的总数:如果完成,则中断,否则将其添加到偏移量,从长度中减去,然后重复。