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

时间:2013-06-17 22:59:21

标签: spring spring-mvc file-upload apache-commons-fileupload apache-commons-io

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

设置为: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,只是空)。

对此行为有何解释?

1 个答案:

答案 0 :(得分:0)

我会检查以下内容:

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