modric
dev log
modric
전체 방문자
오늘
어제
  • 분류 전체보기 (70)
    • DEV (58)
      • Linux (12)
      • JavaScript (5)
      • PHP (4)
      • MySql (4)
      • HTML (7)
      • CSS (9)
      • Spring (13)
      • flutter (1)
      • 오류 (2)
      • devOps (1)
    • 기타 (5)
    • 트렌드 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • HTML
  • CSS
  • PHP
  • JavaScript
  • Spring
  • Linux

공지사항

인기 글

태그

  • mariadb 10
  • centos 7
  • height
  • iframe
  • Safari
  • 메타버스
  • exist
  • 100!
  • js
  • 크롬
  • 테두리
  • 제거
  • 컴파일
  • Destination
  • factorial
  • MYSQL
  • Android
  • lastinsertid
  • centos7
  • 넘침
  • update
  • 파란색
  • ios
  • build
  • php
  • 터치
  • mariadb10
  • 팩토리얼
  • linux
  • 클릭

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
modric

dev log

DEV/Spring

파일 업로드 & 다운로드

2017. 11. 21. 14:50
#파일 업로드

		@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
    'DEV/Spring' 카테고리의 다른 글
    • Java aes256 암호화 복호화
    • JSTL requestScope 예제
    • JDK 설치, 환경변수 설정
    • 이클립스 자동 import
    modric
    modric

    티스토리툴바