[학교 공부][JSP]-파일 업로드
파일업로드
웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것
전송하기 위해서는 JSP 페이지에 폼태그를 사용한다.
전송된 파일을 서버에 저장하기 위해 오픈 라이브러리를 사용한다.
> JSP페이지에 폼태그를 작성할 때 몇가지 중요한 규칙이 있다.
- method 속성 : POST 방식(http헤더에 숨김 / 보안성 높음)
- enctype 속성: multipart/form-data 로 설정
- action 속성 : 파일 업로드를 처리할 JSP파일로 설정
- input 태그의 type 속성 : file로 설정한다.
파일 업로드는 단순한 자바 코드로 작성하여 처리할 수 없어서
cos.jar나 commonsfileupload.jar을 사용해야한다.
MulitpartRequest 이용 :
가장 간단 / cos.jar
서버로 업로드 되는 파일 자체만 다루는 "클래스"
mutilpart/form-data 유형과 post 방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근한다.
서버의 파일 저장 폴더에 동일한 파일명이 있으면 파일명을 자동으 로 변경한다.
![]
서버에 upload한 파일의 경로 설정, 파일의 최대 크기, 파일명의 인코딩 유형은 utf-8로 설정
파일명 중복을 처리하기 위해 defalutFileRenamePolicy 클래스 사용
MultipartRequest 메소드
- getContenttype(String name) 업로드 된 파일의 "콘텐츠 유형"반환 / 파일 없을 경우 null 반환
- getParameter: 요청 파라미터 이름이 "name"인 값을 전달받는다.
- getParameterName() : 요청 파라미터 이름을 Enumeration 객체 타입으로 반환
- getFile() : 서버에 업로드됟ㄴ 파일 객체 반환
- getFilesystemName : 사용자가 설정하여 서버에 실제로 업로드된 파일명을 반환
-아파치 api이용
편리하고 강력한 api 제공 / commonsfileupload.jar
DiskFileupload 클래스의 메소드
- setRepository() : 업로드된 파일을 임시로 저장할 디렉토리를 설정
- setSizeMax(): 파일의 최대 크기를 설정
- setSizeThreshold(): 메모리상에 저장할 최대크기 설정
- 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>
Author And Source
이 문제에 관하여([학교 공부][JSP]-파일 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minina/학교-공부JSP-파일-업로드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)