#파일 업로드
@RequestMapping(value = "/file_upload")
public String file_upload(HttpServletRequest request, Model model, HttpServletResponse response, MultipartHttpServletRequest upload) {
MultipartFile f = upload.getFile("param");
try{
String name = null, ext = null;
String fileName = f.getOriginalFilename(); //파일 원본명
fileName = Normalizer.normalize(fileName, Normalizer.Form.NFC); // 맥(MAC)에서 한글 자모 분리되는 현상 맊기(정규화)
byte[] b = f.getBytes(); //바이트 수 반환
int index = fileName.lastIndexOf(".");
if(index != -1){
name = fileName.substring(0, index); //문자열 반환(0부터, index까지)
ext = fileName.substring(index + 1); //확장자 반환
System.out.println("원본 파일명 : " + name + ", 확장자 : " + ext);
}else{
System.out.println("정상적인 파일을 넣어주세요.");
}
String path = "/usr/local/qfile/" + edu_key; //파일을 넣을 폴더 경로
File p = new File(path);
if(!p.exists()){
p.mkdirs(); //폴더가 없으면 폴더 생성
}
File file = new File("/usr/local/qfile/" + edu_key + "/" + fileName);
FileOutputStream fos = new FileOutputStream(file); //파일에 바이트 스트림으로 저장
InputStream fis = null;
fis = f.getInputStream();
String file_url = edu_key+"/"+fileName; //DB에 저장할 경로
fos.write(b);
fos.close();
fis.close();
} catch (Exception e) {
// TODO: handle exception
}
}
@RequestMapping(value = "/filedown")
public String filedown(HttpServletRequest request, Model model, Authentication auth, HttpServletResponse response) {
IDao dao = sqlSession.getMapper(IDao.class);
String edu_key = request.getParameter("edu_key");
String edu_mid_key = request.getParameter("edu_mid_key");
String edu_small_key = request.getParameter("edu_small_key");
try {
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
HashMap map = new HashMap();
map.put("edu_key", edu_key);
map.put("edu_mid_key", edu_mid_key);
map.put("edu_small_key", edu_small_key);
ContentDto dto = sqlSession.selectOne("com.xxx.xxx.dao.IDao.selectEduDetailMap", map);
String file_url = dto.getEdu_detail_file();
if(file_url.equals("")||file_url.equals(null)){
System.out.println("no file1");
// System.out.println("파일이 없습니다. 관리자에게 문의하세요.");
}else{
String[] arr = file_url.split("/");
String fileName = arr[arr.length-1];
String realfile = "/usr/local/qfile/" + file_url; //실제 파일 경로
File file = new File(realfile);
if(!file.exists()){
System.out.println("no file2");
System.out.println("파일이 없습니다. 관리자에게 문의하세요.");
}else{
InputStream is = null;
OutputStream os = null;
try{
is = new FileInputStream(file);
}catch (Exception e) {
// TODO: handle exception
}
// 한글 파일 깨짐 방지
String header = request.getHeader("User-Agent");
if (header.contains("MSIE") || header.contains("Trident")) { //IE 11버전부터 Trident로 변경되었기때문에 추가해준다.
fileName = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20");
} else {
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
response.reset() ;
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
os = response.getOutputStream();
byte b[] = new byte [(int) file.length()];
int leng = 0;
while( (leng = is.read(b)) > 0 ){
os.write(b,0,leng);
}
is.close();
os.close();
System.out.println("File Download");
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
'DEV > Spring' 카테고리의 다른 글
Java aes256 암호화 복호화 (0) | 2017.10.31 |
---|---|
JSTL requestScope 예제 (0) | 2017.10.27 |
JDK 설치, 환경변수 설정 (0) | 2017.10.25 |
이클립스 자동 import (0) | 2017.09.26 |
이클립스 자동 세미콜론 (0) | 2017.09.26 |