java - 将文件从输入流复制到输出流会导致错误的副本

标签 java file servlets upload

我做了一个上传文件servlet,总结如下:

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
     FileItemStream item = iter.next();
     InputStream stream = item.openStream()
     File file = new File(path +"/"+ item.getFieldName));

     FileOutputStream fout= new FileOutputStream (file);
     BufferedOutputStream bout= new BufferedOutputStream (fout);
     BufferedInputStream bin= new BufferedInputStream(stream);
     byte buf[] = new byte[2048];
     while ((bin.read(buf)) != -1){
        bout.write(buf);
     }
     bout.close();
     bin.close();
}

我使用了流,因此文件不会加载到内存中。

文件正在顺利上传,但我无法打开结果文件(错误因文件类型而异)。而且生成的文件的大小比原始文件的大小要大。

我尝试了不同类型的流读取器和写入器,但无法更接近,并且找不到类似的问题。 我在接收和写入字节时排除了编码,所以编码并不重要,对吗?

可能是什么问题?

最佳答案

您正在写入 buf 数组的所有内容。这可能是上次阅读的问题。

像这样更改 while 循环:

int n;
while ((n = bin.read(buf)) != -1)
{
    bout.write(buf, 0, n);
}

关于java - 将文件从输入流复制到输出流会导致错误的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29011400/

相关文章:

c++ - C++从文件中读取对象

java - 结果集到集合

mysql - 将复选框的未选中值插入数据库

java - 如何重写 HttpServletRequest toString 方法?

java - 线程完成执行后是否会通知另一个加入的线程?

java - 内存不足,无法处理大型文本文件并将其写回 xml

file - 如何使用 PowerShell 删除空子文件夹?

java - 无法删除文件,因为该文件正在使用中

java - 尝试访问 Websphere 7.0 版本中的特定 URI 时遇到问题

java - Hibernate SQLQuery 列表方法返回对象而不是对象数组