Как сжать несколько файлов в формат .zip и формат .zip, преобразованный в base64, который будет использоваться в качестве ответа? - PullRequest
1 голос
/ 13 июня 2019

Я сделал несколько строк кода и некоторое время работал, программа, которую я создал, выглядит следующим образом. Когда я сжимаю формат .zip, в каталоге будет сформирован файл example.zip. Следующим шагом программа запускает команду для поиска файла .zip в каталоге. Если он найден, он будет преобразован в base64 и отправлен в качестве тела ответа.

У меня вопрос, как мне обработать формат .zip? Эта программа не формирует файлы в каталоге, но сразу преобразует их в стадию base64, поэтому в каталоге не требуется файл example.zip.

@Autowired
private FileConvert fileConvert;

@GetMapping("/{formCode}/getZip")
public ResponseEntity<JSONObject> getZipDocument(@PathVariable(value="formCode") String formCode) throws IOException{
        try {
            List<DocumentImportan> docList = docService.getSelectedFormCode(formCode);
            List<Object> listDoc = new ArrayList<>();
            HashMap<String, Object> data = new HashMap<>();
            String[] dataPdf = new String[docList.size()];
            String nameFile = null;
            int no = 0;
            for(DocumentImportan document : docList) {
                String[] arrCode = document.getFormCode().split(",");
                String[] arrDesc = document.getFormDesc().split(",");
                for(int i = 0; i < arrCode.length; i++) {
                    if (arrCode[i].equals(formCode)) {
                        nameFile = arrDesc[i];
                    }
                }
                dataPdf[no] = document.getPdfName();

                no++;
            }

**//process the .zip format method**
            String files = fileConvert.zip(dataPdf, nameFile);

**//base64 convert process**
            String base64Zip = fileConvert.encodeFile(files);
            data.put("zipBase64", base64Zip);
            listDoc.add(data);
            fileConvert.deleteFileExist(files);

            jsonResponse.put(CONST_MSG, "Zip Successful Load");
            jsonResponse.put(CONST_STATUS, 200);
            jsonResponse.put("data", listDoc);

        } catch (Exception e) {
            logger.info(String.format(CONST_ERRORMSG, e.getMessage()));
            jsonResponse.put(CONST_MSG, e.getMessage());
        }
        return new ResponseEntity<>(jsonResponse, HttpStatus.OK);
    }

FileConvert.class

**//method format .zip**
public String zip(String[] data, String nameFile) {
        long timeStamp = new Date().getTime();
        String zipFile = timeStamp+"_"+nameFile+".zip";
        String[] srcFiles = data;

        try {
            byte[] buffer = new byte[1024];
            FileOutputStream fos = new FileOutputStream(context.getEnvironment().getProperty(CONST_FOLDER) + File.separatorChar + zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);

            for (int i=0; i < srcFiles.length; i++) {
                File srcFile = new File(context.getEnvironment().getProperty(CONST_FOLDER) + File.separatorChar + srcFiles[i]);
                FileInputStream fis = new FileInputStream(srcFile);
                zos.putNextEntry(new ZipEntry(srcFile.getName()));
                int length;
                while ((length = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, length);
                }
                zos.closeEntry();
                fis.close();
            }
            zos.close();
        }
        catch (IOException e) {
            logger.error(String.format("Decode file error caused ", e.getMessage()));
        }
        return zipFile;
    }




**//method convert base64**
public String encodeFile(String path) throws IOException {
        File file = new File(context.getEnvironment().getProperty(CONST_FOLDER) + File.separatorChar + path);
        InputStream is = new FileInputStream(file);
        long length = file.length();
        byte[] gambar = new byte[(int) length];
        int readGambar = is.read(gambar);
        if (readGambar > 0) {
            byte[] bytes = Base64.encodeBase64(gambar);
            is.close();
            return new String(bytes);
        } else {
            return null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...