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

时间:2016-03-31 12:49:33

标签: excel spring jboss upload xlsx

我在Spring4应用程序中上传文件存在问题。

TL;博士

.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

19KB

但上传后,我有:

$ ls -la | grep .xlsx
-rw-r--r--   1 user  staff    24K 31 mar 13:47 SampleXLSFile_19kb.xlsx

whaaat!? 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);
}

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

@UPDATE

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

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

@SOLVED

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

0 个答案:

没有答案