여러개의 첨부파일 전송 형태( Front-end와 소통으로 전송방식이 변경 됨 ) 1. name값은 전부 다르고, 순차적으로 전송하는 방식 2. name값을 동일하게 전송하는 방식요고루 해볼거임 3. multiple을 이용해서 전송하는 방식( <input type=" file " multiple=" multiple">한번에 여러개의 파일을 받는 형태 )
=> 직접 해보니 해당방법으로 3번 - 마크업만 바꾸면 동일하게 저장이 된다! ( multiple 사용시 갯수 제한 : front에서 js로 핸들링 - 해당 element[0].files.lengthnode[0].files.length backend도 가능 )
⚡ 받은파일을 받아서 실제 디렉토리에 저장 => 확장자만 가져와서 파일명:(날짜-번호)로 저장 : 절대 파일명 중복 방지
MultipartConfig가 jsp에서는 까다로움.. => jsp만으로 file형태 받기 불가(사실 라이브러리 사용하면 가능은 함..) do파일(.java)로 전송
Part : multipart/form-data형태로 전송된 POST요청의 항목 데이터를 다루는 기능들이 정의된 인터페이스 Collection : data배열(=byte배열),여러개의 파일을 받을때 사용 request.getParts() : html속성중 type="files"는 모두 가져옴
첨부파일이 여러개일 경우 JSF (Java Collection Framework) 형태로 사용 : Collection을 사용해서...
package shop;
@MultipartConfig(
fileSizeThreshold = 1024*1024*2,
maxFileSize = 1024*1024*5,
maxRequestSize = 1024*1024*100
)
public class jsp14 extends HttpServlet {
private static final long serialVersionUID = 1L;
RequestDispatcher rd = null;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//Part 자료형을 이용하여 각각의 파일을 클래스 배열로 첨부
Collection<Part> files = request.getParts();
ArrayList<Part> ap = new ArrayList<Part>(files.size());
for(Part p : files) { //반복문 사용 - 배열이라서
ap.add(p);
//sysout 확인해볼 시 이렇게 입력
//System.out.println(ap.get(idx).getSubmittedFileName());
}
//웹경로 - 저장할 위치
String url = request.getServletContext().getRealPath("/upload/");
String filename ="";
String today = "";
int rnd = 0; //random - 시분초를 넣어도 중복될수 있음을 방지
SimpleDateFormat df = new SimpleDateFormat("yymmddHms");
int w=0;
while(w<ap.size()) {
Date dt = new Date();
today = df.format(dt); //날짜+시간
rnd = (int)Math.ceil(Math.random()*100); //랜덤숫자 1~100
filename = ap.get(w).getSubmittedFileName(); //실제파일명
int dot = filename.lastIndexOf(".");
String rename = filename.substring(dot+1); //속성명만 출력
String fullname = today + "_" + String.valueOf(rnd) +"." + rename;
if(filename!= "") {
ap.get(w).write(url + fullname);
}
w++;
}
//배열 정리
files.clear();
ap.clear();
//jsp에서는 업로드 된 파일에 대한 리스트 출력
this.rd = request.getRequestDispatcher("./jsp14.jsp");
this.rd.forward(request, response);
}
}