spring4,jboss eap 6.4.0 xlsx文件上传损坏大小

abd*_*apl 5 excel upload jboss spring xlsx

我在 Spring4 应用程序中上传文件时遇到问题。

太长了;博士

.xlsx 文件上传后,我们的文件比原始文件大。另外,我们无法使用 Microsoft Office 打开它。

问题

我检查了每个教程,并以各种方式进行了实施。它适用于除 XLSX 之外的几乎所有文件类型。

设想

我正在使用文件(例如,首先来自http://www.sample-videos.com/download-sample-xls.php

在终端中:

$ ls -la | grep .xlsx
-rw-r--r--@  1 user  staff    19K 31 mar 13:46 SampleXLSFile_19kb.xlsx
Run Code Online (Sandbox Code Playgroud)

19kb

但上传后,我有:

$ ls -la | grep .xlsx
-rw-r--r--   1 user  staff    24K 31 mar 13:47 SampleXLSFile_19kb.xlsx
Run Code Online (Sandbox Code Playgroud)

哇啊!?24K?

调试后,我发现文件位于 Jboss 临时目录中,并且具有新的、更大的大小。

有什么问题?

上传后我无法在 Excel 中打开 .xslx 文件,无法在应用程序中处理它们。文件已损坏。

你有什么想法?正如我所看到的,仅 xlsx 文件存在问题。

上传代码示例:

@RequestMapping(value = "/api/file", method = RequestMethod.POST)
public ResponseEntity upload(@RequestParam("file") MultipartFile file) throws Exception {
    if (!file.isEmpty()) {
        try {
            BufferedOutputStream stream = new BufferedOutputStream(
                    new FileOutputStream(new File(this.uploadDirectory + "/" + file.getOriginalFilename())));
            FileCopyUtils.copy(file.getInputStream(), stream);
            stream.close();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
    return new ResponseEntity(null, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的——没什么特别的。

@更新

看起来仅 .xslx 文件没有问题。二进制文件也存在问题。

我发现,这org/apache/commons/fileupload/MultipartStream.java就是导致这个问题的原因。看起来它从里面读取了太多字节并保存了更大的文件。
例如,我上传了 43M 的 zip 文件,但最后我上传了 78M 的 zip 文件。

@解决了

事实证明这是一些内部应用程序问题。我们有一个 Spring 过滤器,它管理当前请求以提取一些数据进行记录。过滤器运行得很早,因此上传机制从我们的过滤器中获取损坏的数据。