0

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

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

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

4

1 回答 1

0

我会检查以下内容:

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