簡體   English   中英

Angular excel 文件上傳拋出 NotOfficeXmlFileException

[英]Angular excel file upload throws NotOfficeXmlFileException

我想用 Angular 上傳 excel 文件並通過 REST ZDB974238714CA8DE634A7CE1D8 發送到后端。 該文件在 MS Excel 中創建為 .xlsx 文件。 但是當我嘗試讀取 excel 文件時,我在后端服務中遇到了以下異常:

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

這里 Angular Rest 調用:

     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);
            });
        }
    }

這里是后端代碼:

    @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);
        }
        ....

有什么幫助嗎?

請在您的通話中嘗試以下標題:

let headers = new Headers();
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers });

this.http.post('/rest/upload', formData, options)....

這將設置正確的內容類型,因此希望能夠修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM