首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角excel文件上传抛出NotOfficeXmlFileException

角excel文件上传抛出NotOfficeXmlFileException
EN

Stack Overflow用户
提问于 2022-09-02 13:53:27
回答 1查看 108关注 0票数 1

我想上传一个excel文件与角,并通过REST发送到后端。该文件以.xlsx文件的形式在MS中创建。但是,当我试图读取excel文件时,我在后端服务中得到了以下异常:

代码语言:javascript
复制
org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file
    at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.getNextEntry(ZipArchiveThresholdInputStream.java:156)
    at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:94)
    at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:132)
    at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:312)
    at org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:59)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:289)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:285)
    at 
Caused by: java.util.zip.ZipException: Unexpected record signature: 0X2D2D2D2D
    at org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry(ZipArchiveInputStream.java:296)
    at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.getNextEntry(ZipArchiveThresholdInputStream.java:152)
    ... 86 more

在这里,有角度的休息呼叫:

代码语言:javascript
复制
     onFileSelect(event): void {
        const file: File = event.target.files[0];
        if (file) {
            const formData = new FormData();
            formData.append("file", file);

            this.http.post('/rest/upload', formData)
            .map((response: Response) => {
                let body = response.json();
                return body || [];
            })
            .catch((error: Response) => {
                return this.handleError(error);
            });
        }
    }

在这里,后端代码:

代码语言:javascript
复制
    @RequestMapping(value = "/rest/upload", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
    @ResponseBody
    public ResponseEntity<List<BaselineJson>> uploadExcel(@FormDataParam("file") InputStream excelFile) {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(excelFile);
            //Get first/desired sheet from the workbook
            XSSFSheet sheet = workbook.getSheetAt(0);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        ....

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-05 11:18:07

请在您的呼叫中尝试以下标题:

代码语言:javascript
复制
this.http.post('/rest/upload', formData)....

根据某些环境/浏览器,头似乎可以工作,但是暂时删除它们。

代码语言:javascript
复制
public ResponseEntity<String> uploadExcel(@RequestParam("file") MultipartFile excelFile) {

然后创建如下工作簿:

代码语言:javascript
复制
        workbook = new XSSFWorkbook(excelFile.getInputStream());

你能帮我查一下这个吗?

希望查看完整演示答案的人,可以在这里查看github条目:

Github.com/inthe车库/文件上传器

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73583646

复制
相关文章

相似问题

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