【问题标题】:Spring MVC file upload via MultipartFile gives sometimes(!) empty InputSteam通过 MultipartFile 上传 Spring MVC 文件有时会给出(!)空 InputStream
【发布时间】:2013-06-17 22:59:20
【问题描述】:

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

设置是:Spring 3.2.2,commons fileupload 1.3,commons io 2.4。我们实际上是直接从带有外部 Tomcat 7.0.40 的 Eclipse 运行的。它已在 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,只是空的)。

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

【问题讨论】:

  • 我遇到了类似的问题,你解决了吗?

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


【解决方案1】:

我会检查以下内容:

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

【讨论】:

  • 这不是权限问题,因为一切都适用于图像和 pdf。甚至 some docx 也运行良好,但其中大多数只是保存为 0 字节文件。而且我认为没有任何杀毒软件。至少在我的开发系统上没有,问题仍然存在。
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 2014-09-25
  • 2012-06-06
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多