Я сделал несколько строк кода и некоторое время работал, программа, которую я создал, выглядит следующим образом.
Когда я сжимаю формат .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;
}
}