Java生成Json文件添加到ZIP壓縮並導出

Java生成Json文件添加到ZIP壓縮並導出

前言

     需要根據在前端選擇的文件列表生產Json文件並導出Zip文件

代碼說明

     前端部分的方法:

    // 導出選中的文件
    exportFiles() {
        this.fileIdList = [];
        for (let i = 0; i < this.multipleSelection.length; i++) {
            this.fileIdList.push(this.multipleSelection[i].fileId);
        }
        const response = dataExport(this, this.fileIdList);
        let blob = new Blob([response.data], {
            type: 'application/zip'
        });
        if (window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveBlob(blob)
        } else {
            let link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            link.click();
            window.URL.revokeObjectURL(link.href); //釋放內存
        }
    },
	export const dataExport = (vueObject, dataIdList) => getDataRaw(vueObject, url);
	
	export function getDataRaw(vueObject, url) {
	    return new Promise((resolve) => {
	        const config = {};
	        config['responseType'] = 'blob';
	        Vue.prototype.$http.get(url, config)
	            .then(res => {
	                console.log(res);
	                resolve(res)
	            })
	    });
	}

     後端部分代碼如下:

    @GetMapping("export/{fileIdList}")
    @ApiOperation(value = "導出ZIP文件", notes = "參數:fileIdList"
    public void export(@PathVariable("fileIdList") String fileIdList, HttpServletResponse response) {
        try {
            String[] dataIdList = fileIdList.split(",");
            String baseAddress = System.getProperty("java.io.tmpdir");
            String folder = IDGenerator.idCreated(6, 0);
            // 根據Id生成對應Json文件
            if (dataIdList != null && dataIdList.length > 0) {
                for (String ids : dataIdList) {
                    int id = Integer.valueOf(ids);
                    FileInfo fileInfo = fileInfoService.getById(id);
                    exportFileVO.setData(fileInfo);
                    String jsonString = JSON.toJSONString(exportFileVO, SerializerFeature.WriteMapNullValue);
                    FileUtils.createFile(baseAddress + folder + "/", fileInfo.getFileName() + ".json", jsonString);
                }
            }
            // 將文件夾壓縮爲ZIP文件
            String zipFile = baseAddress + folder + ".zip";
            FileUtils.compress(baseAddress + folder, zipFile);
            File file = new File(zipFile);
            FileInputStream inputStream = new FileInputStream(file);
            // 導出Zip文件
            byte[] data = new byte[(int) file.length()];
            inputStream.read(data);
            inputStream.close();
            response.setHeader("content-type", "application/octet-stream;charset=ISO8859-1");
            response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.addHeader("Content-Length", "" + file.length());
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(folder + ".zip", "UTF-8"));
            OutputStream stream = response.getOutputStream();
            stream.write(data);
            stream.flush();
            stream.close();
            // 刪除文件夾及壓縮文件
            FileUtils.deleteDir(baseAddress + folder);
            FileUtils.deleteDir(zipFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

小結

      很常見的一個功能需求,整理方法做一次總結,榮幸與您分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章