Spring MVC文件上传通过MultipartFile有时(!)空InputSteam



我们在简单的文件上传系统中遇到了一个奇怪的问题。

设置是:Spring 3.2.2, commons fileupload 1.3, commons io 2.4。实际上,我们直接从Eclipse运行,使用外部Tomcat 7.0.40。它已经在Mac OS X 10.8和10.6上进行了测试。

代码如下:

public void saveFile(MultipartFile file, String description) {
    System.out.println(file.getOriginalFilename());
    System.out.println(file.getSize());
    OutputStream out = new FileOutputStream("someFileName");
    IOUtils.copy(file.getInputStream(), out);
    out.flush();
    out.close();
}

它输出正确的文件名和正确的文件大小!

现在,当要将文件写入磁盘时,它会生成一个0字节的文件。这尤其发生在.docx文件中(大约95%的情况下)。这似乎取决于文件。图片和PDF文档似乎总是有效。

没有异常或任何其他提示。调试器说InputStream是空的(不是null,只是空的)

对这种行为有什么解释吗?

我会检查以下内容:

  • 您的服务器是否有防病毒/恶意软件来防止未知程序将docx写入文件系统
  • 运行服务器的操作系统用户(因此将文件写入FS)是否有足够的权限这样做?
  • InputStream empty可能意味着上传的文档以EOF开头。还要检查docx本身的内容,也许它已经损坏/一些文件编码问题导致多字节字符解释为EOF。我可能会通过打印十六进制
  • 的前几个字节来调试docx。

相关内容

  • 没有找到相关文章

最新更新