首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当上传到服务器(org.apache.poi)时,Spring会损坏Excel(xlsx,xls)文件

当上传到服务器(org.apache.poi)时,Spring会损坏Excel(xlsx,xls)文件
EN

Stack Overflow用户
提问于 2018-05-08 09:52:21
回答 1查看 1.6K关注 0票数 1

我正在使用spring上传Excel文件,但是apache无法读取该文件,因为它要么损坏,要么以不同的格式读取。但只有当我上传Excel文件时才会发生这种情况。Excel文件在上传之前就会打开。使用POI版本3.17的Iam

这是我的密码。

HTML

代码语言:javascript
复制
<form method="post" action="/uploadExcelFile" enctype="multipart/form-data">
    <div id="categoriesForMessages" class="row">
        <div class="col-sm-12">
            <label>Upload File</label>
            <input id="form-control-9" name="file" type="file" accept=".xls,.xlsx">
            <p class="help-block">
                <small>Upload Excel types .xls .xlsx</small>
            </p>
        </div>
</form>

控制器

代码语言:javascript
复制
public class XController {

    @PostMapping("/uploadExcelFile")
    public String uploadFile(Model model, MultipartFile file) throws IOException {

        File currDir = new File(".");
        String path = currDir.getAbsolutePath();
        fileLocation = path.substring(0, path.length() - 1) + file.getOriginalFilename();
        System.out.println(fileLocation);
        FileOutputStream f = new FileOutputStream(fileLocation);

        try {
            FileInputStream fis = new FileInputStream(fileLocation);
            Workbook workbook = WorkbookFactory.create(fis);
            fis.close();

            Sheet sheet = workbook.getSheetAt(0);
            Row row = sheet.getRow(0);

            System.out.println(row.getCell(0).getStringCellValue());

        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }

        return "redirect:/home";
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 10:25:52

代码的问题在于,您正在尝试读取刚才创建的空文件。但是,您应该阅读multipart-file来创建工作簿。

代码语言:javascript
复制
       FileInputStream fis = new FileInputStream(fileLocation); // fis created with new file location 
        Workbook workbook = WorkbookFactory.create(fis); //creating a workbook with an empty file

如果您试图从工作簿中读取,您可以直接使用MultipartFile对象并完成它。不需要创建新的File

做这样的事。

代码语言:javascript
复制
  Workbook workbook = WorkbookFactory.create(file.getInputStream());

然后继续处理这个文件。如果你想把文件保存在某个地方,你可以这样做,

代码语言:javascript
复制
try (FileOutputStream outputStream = new FileOutputStream("/path/to/your/file/hello.xlsx")) {
            workbook.write(outputStream);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50230764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档