[학교 공부][JSP]-파일 업로드

파일업로드

웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것
전송하기 위해서는 JSP 페이지에 폼태그를 사용한다.
전송된 파일을 서버에 저장하기 위해 오픈 라이브러리를 사용한다.

> JSP페이지에 폼태그를 작성할 때 몇가지 중요한 규칙이 있다.

  1. method 속성 : POST 방식(http헤더에 숨김 / 보안성 높음)
  2. enctype 속성: multipart/form-data 로 설정
  3. action 속성 : 파일 업로드를 처리할 JSP파일로 설정
  4. input 태그의 type 속성 : file로 설정한다.

파일 업로드는 단순한 자바 코드로 작성하여 처리할 수 없어서
cos.jar나 commonsfileupload.jar을 사용해야한다.

MulitpartRequest 이용 :

가장 간단 / cos.jar
서버로 업로드 되는 파일 자체만 다루는 "클래스"
mutilpart/form-data 유형과 post 방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근한다.
서버의 파일 저장 폴더에 동일한 파일명이 있으면 파일명을 자동으 로 변경한다.
![]

서버에 upload한 파일의 경로 설정, 파일의 최대 크기, 파일명의 인코딩 유형은 utf-8로 설정
파일명 중복을 처리하기 위해 defalutFileRenamePolicy 클래스 사용

MultipartRequest 메소드

  1. getContenttype(String name) 업로드 된 파일의 "콘텐츠 유형"반환 / 파일 없을 경우 null 반환
  2. getParameter: 요청 파라미터 이름이 "name"인 값을 전달받는다.
  3. getParameterName() : 요청 파라미터 이름을 Enumeration 객체 타입으로 반환
  4. getFile() : 서버에 업로드됟ㄴ 파일 객체 반환
  5. getFilesystemName : 사용자가 설정하여 서버에 실제로 업로드된 파일명을 반환

-아파치 api이용

편리하고 강력한 api 제공 / commonsfileupload.jar

DiskFileupload 클래스의 메소드

  1. setRepository() : 업로드된 파일을 임시로 저장할 디렉토리를 설정
  2. setSizeMax(): 파일의 최대 크기를 설정
  3. setSizeThreshold(): 메모리상에 저장할 최대크기 설정
  4. parseRequest():multipart/form-data 유형의 요청 파라미터를 가져온다.

commonsfileupload의 예시 코드


<%
String path="C:\\upload";
DiskFileUpload upload=new DiskFileUpload();
//DiskFileUpload 객체를 만든다.

upload.setSizeMax(1000000);
upload.setSizeThreshold(4096);
upload.setRepositoryPath(path);

List items=upload.parseRequest(request);
//요청받은 파라미터들을 리스트에 넣는다.
Iterator params=items.iterator();
//Iterator()를 이용하여 리스트의 모든 데이터 가져와 Iterator의 params 변수에 넣음
while(params.hasNext())
{	FileItem item = (FileItem)params.next();//params의 내용을 FileItem객체의 fileItem에 넣는다.
	if(!item.isFormField()){//파라미터가 파일이 아닌 경우 true반환
	
		
		String fileFieldName=item.getFieldName();
		String fileName=item.getName();
		String contentType=item.getContentType();
		
		fileName=fileName.substring(fileName.lastIndexOf("\\")+1);// 이 부분 중요해!!
		//lastIndexOf로 마침표가 있는 마지막 위치를 찾은 뒤의 String(확장자)를 찾는 것
		//substring을 하지 않고 하게 되는 경우 경로+파일명 을 가져오기 때문에
		// 파일경로 까지 자르고 +1된 문자열 부터 가져오도록 한다. 
		long fileSize=item.getSize();
		
		File file=new File(path+"/"+fileName);
		item.write(file);//파일과 관련된 자원 저장

	out.println("요청 파라미터 이름 : "+fileFieldName+"<br>");
	out.println("저장파일이름 :"+fileName+"<br>");
	out.println("파일 콘텐츠 유형 : "+contentType+"<br>");
	out.println("파일 크기 : "+fileSize);
	
}

}

%>
</body>
</html>

좋은 웹페이지 즐겨찾기