728x90
반응형
안녕하세요~ 작은나무입니다!!
오늘은 여러개의 업로드된 파일을 ZIP파일로 압축 후 다운로드까지 되는 부분을 정리해 보도록 하겠습니다.
java.util.zip 패키지를 이용해서 파일 압축하는 코드를 작성해 보겠습니다.
[소스구현 - Class]
public void CompressZIP(HttpServletRequest request, HttpServletResponse response, Object handler) {
String[] files = { "file1.pdf", "file2.jpg", "file3.txt" };
ZipOutputStream zout = null;
String zipName = "CompressionFile.zip"; //ZIP 압축 파일명
String tempPath = "";
if (files.length > 0) {
try{
tempPath = "/temp/"; //ZIP 압축 파일 저장경로
//ZIP파일 압축 START
zout = new ZipOutputStream(new FileOutputStream(tempPath + zipName));
byte[] buffer = new byte[1024];
FileInputStream in = null;
for ( int k=0; k<files.length; k++){
in = new FileInputStream("/temp/" + files[k]); //압축 대상 파일
zout.putNextEntry(new ZipEntry(files[k])); //압축파일에 저장될 파일명
int len;
while((len = in.read(buffer)) > 0){
zout.write(buffer, 0, len); //읽은 파일을 ZipOutputStream에 Write
}
zout.closeEntry();
in.close();
}
zout.close();
//ZIP파일 압축 END
//파일다운로드 START
response.setContentType("application/zip");
response.addHeader("Content-Disposition", "attachment;filename=" + zipName);
FileInputStream fis = new FileInputStream(tempPath + zipName);
BufferedInputStream bis = new BufferedInputStream(fis);
ServletOutputStream so = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(so);
int n = 0;
while((n = bis.read(buffer)) > 0){
bos.write(buffer, 0, n);
bos.flush();
}
if(bos != null) bos.close();
if(bis != null) bis.close();
if(so != null) so.close();
if(fis != null) fis.close();
//파일다운로드 END
}catch(IOException e){
//Exception
}finally{
if (zout != null){
zout = null;
}
}
}
}
코드 작성 후 Local 테스트 진행을 해보니 압축 및 다운로드 기능 정상 동작 확인 후 서버에 반영했는대요~
압축 속도가 엄청 오래 걸리는 거에요;;; 왜 그런가 했더니...
파일서버가 NFS로 설정되어 있는 폴더로 지정을 했더니 Write 속도가 안나오고, Storage서버로 경로를 변경하였더니 아주 잘 동작하네요^^;
728x90
반응형
그리드형