728x90
반응형
[JAVA - ZIP 파일 다운로드]
● Zip 파일 다운로드
- zip 파일 다운로드 시 ContentType은 application/zip;으로 한다
- ZipOutputStream/ZipInputStream이 java.util.zip에 있다
해당 클래스로 Zip 파일생성/ 다운로드/ 업로드가 가능하니 사용해보는게 좋을것 같다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
@GetMapping(value = "/downloadProgram")
public void downloadProgram(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = "type") String type
) {
ResultMap result = new ResultMap();
FileInputStream fis = null;
BufferedInputStream bis = null;
ServletOutputStream so = null;
BufferedOutputStream bos = null;
try {
Path targetPath = null;
if (type.equalsIgnoreCase("win") || type.equals("win")) targetPath = Paths.get(commonService.getSystemEnv().getDgsnpgmFlpth());
else targetPath = Paths.get(commonService.getSystemEnv().getMobileappFlpth());
String flpth = submitService.getDownloadFilePath(type);
targetPath = targetPath.resolve(flpth);
File file = new File(targetPath.toString());
if (file.exists()) {
String downName = null;
String browser = request.getHeader("User-Agent");
if (browser.contains("MSIE") || browser.contains("Trident") || browser.contains("Chrome")) {// 브라우저 확인 파일명
downName = URLEncoder.encode(file.getName(), "UTF-8").replaceAll("\\+", "%20");
} else {
downName = new String(file.getName().getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + downName + "\";");
response.setContentType("application/zip;");
response.setHeader("Content-Transfer-Encoding", "binary;");
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
so = response.getOutputStream();
bos = new BufferedOutputStream(so);
byte[] data = new byte[2048];
int input = 0;
while ((input = bis.read(data)) != -1) {
bos.write(data, 0, input);
bos.flush();
}
if (bos != null) bos.close();
if (bis != null) bis.close();
if (so != null) so.close();
if (fis != null) fis.close();
}else{
throw new Exception();
}
} catch (Exception e) {
e.printStackTrace();
}
}
|
cs |
※ window.location.href로 URL 던지게 되면 오류가 날경우 빈 화면이 표출된다
이것은 location이 페이지를 로딩하여 불러오는 것이기 때문인데 이럴 경우를 대비해서 오류가 났었을 때 보여줄
page를 제작하여 해당 페이지로 넘길 수 있도록 만들어준다.
- 임시 방편으로는 ifram을 하나 만들어서 href속성을 넣어줘서 <iframe name="frmDownload">
script에서 frmDownload.location.href = "download URL"; 을 실행시킨다.
그러면 iframe 태그가 현재 HTML에 다른 문서를 포함시킬때 사용하기 때문에 오류가 나더라도
iframe 안에 HTML이 불러와져서 페이지의 변동을 막을 수 있다.
728x90
반응형
'IT 개발 > JAVA' 카테고리의 다른 글
Not allowed to read local resource 오류 (0) | 2021.11.04 |
---|---|
JAVA - UUID 란 / UIUID 생성하기 (0) | 2021.11.04 |
Exception) - java.nio.file.AccessDeniedException (0) | 2021.10.18 |
파일 업로드 - FileUtils.copyInputStreamToFile() (0) | 2021.10.18 |
브라우저 확인 후 파일 다운로드 (0) | 2021.09.23 |