101 lines
3.5 KiB
Java
101 lines
3.5 KiB
Java
|
|
package com.dbnt.faisp.config;
|
||
|
|
|
||
|
|
import com.dbnt.faisp.fpiMgt.monthPlan.service.MonthPlanService;
|
||
|
|
import com.dbnt.faisp.userInfo.model.UserInfo;
|
||
|
|
import lombok.RequiredArgsConstructor;
|
||
|
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||
|
|
import org.springframework.util.FileCopyUtils;
|
||
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
||
|
|
import org.springframework.web.bind.annotation.RestController;
|
||
|
|
|
||
|
|
import javax.servlet.http.HttpServletRequest;
|
||
|
|
import javax.servlet.http.HttpServletResponse;
|
||
|
|
import java.io.*;
|
||
|
|
import java.net.URLEncoder;
|
||
|
|
|
||
|
|
@RestController
|
||
|
|
@RequiredArgsConstructor
|
||
|
|
public class FileController {
|
||
|
|
|
||
|
|
private final MonthPlanService monthPlanService;
|
||
|
|
|
||
|
|
@GetMapping("/file/fileDownload")
|
||
|
|
public void fileDownload(HttpServletRequest request,
|
||
|
|
HttpServletResponse response,
|
||
|
|
String board,
|
||
|
|
Integer parentKey,
|
||
|
|
Integer fileSeq) {
|
||
|
|
FileInfo downloadFile = null;
|
||
|
|
switch (board){
|
||
|
|
case "monthPlan":
|
||
|
|
downloadFile = monthPlanService.selectPlanFile(parentKey, fileSeq);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
BufferedInputStream in;
|
||
|
|
BufferedOutputStream out;
|
||
|
|
try {
|
||
|
|
File file = new File(downloadFile.getSavePath(), downloadFile.getConvNm());
|
||
|
|
|
||
|
|
setDisposition(downloadFile.getFullName(), request, response);
|
||
|
|
in = new BufferedInputStream(new FileInputStream(file));
|
||
|
|
out = new BufferedOutputStream(response.getOutputStream());
|
||
|
|
FileCopyUtils.copy(in, out);
|
||
|
|
out.flush();
|
||
|
|
if(out!=null) out.close();
|
||
|
|
if(in!=null )in.close();
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||
|
|
String browser = getBrowser(request);
|
||
|
|
|
||
|
|
String dispositionPrefix = "attachment; filename=";
|
||
|
|
String encodedFilename = null;
|
||
|
|
|
||
|
|
if (browser.equals("MSIE")) {
|
||
|
|
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||
|
|
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
|
||
|
|
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||
|
|
} else if (browser.equals("Firefox")) {
|
||
|
|
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||
|
|
} else if (browser.equals("Opera")) {
|
||
|
|
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||
|
|
} else if (browser.equals("Chrome")) {
|
||
|
|
StringBuffer sb = new StringBuffer();
|
||
|
|
for (int i = 0; i < filename.length(); i++) {
|
||
|
|
char c = filename.charAt(i);
|
||
|
|
if (c > '~') {
|
||
|
|
sb.append(URLEncoder.encode("" + c, "UTF-8"));
|
||
|
|
} else {
|
||
|
|
sb.append(c);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
encodedFilename = sb.toString();
|
||
|
|
} else {
|
||
|
|
throw new IOException("Not supported browser");
|
||
|
|
}
|
||
|
|
|
||
|
|
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
|
||
|
|
|
||
|
|
if ("Opera".equals(browser)) {
|
||
|
|
response.setContentType("application/octet-stream;charset=UTF-8");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private String getBrowser(HttpServletRequest request) {
|
||
|
|
String header = request.getHeader("User-Agent");
|
||
|
|
if (header.indexOf("MSIE") > -1) {
|
||
|
|
return "MSIE";
|
||
|
|
} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
|
||
|
|
return "Trident";
|
||
|
|
} else if (header.indexOf("Chrome") > -1) {
|
||
|
|
return "Chrome";
|
||
|
|
} else if (header.indexOf("Opera") > -1) {
|
||
|
|
return "Opera";
|
||
|
|
}
|
||
|
|
return "Firefox";
|
||
|
|
}
|
||
|
|
}
|