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 过滤器,它管理当前请求以提取一些数据进行记录。过滤器运行得很早,因此上传机制从我们的过滤器中获取损坏的数据。
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |