반응형
Annotation명 | 설명 |
@fileSizeThreshold | fileUpload 시에 메모리에 저장되는 임시 파일 크기를 정의 [자료형 : int] |
@location | 파일 업로드 시에 임시 저장 디렉터리를 지정한다. [자료형 : String] |
@maxFileSize | 업로드할 파일의 치대 크기를 지정한다. [자료형 : long] |
@maxRequestSize | request 시에 최대 크기를 지정한다. [자료형 : long] |
package info.thecodinglive.upload;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.*;
@WebServlet(urlPatterns = "/upload", name = "uploadServlet")
@MultipartConfig(
fileSizeThreshold = 1024 * 1024 * 2, // 2mb
maxFileSize = 1024 * 1024 * 10, // 10mb
maxRequestSize = 1024 * 1024 * 50, //50mb
location = "c:/upload" //파일저장위치
)
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//경로
final String path = request.getParameter("destination");
//파일
final Part filePart = request.getPart("file");
//파일이름
final String fileName = getFileName(filePart);
final PrintWriter writer = response.getWriter();
try (OutputStream out = new FileOutputStream(new File(path + File.separator + fileName)); InputStream filecontent = filePart.getInputStream()) {
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
writer.print("new File: " + fileName + path + "에 생성되었습니다.");
} catch (FileNotFoundException fne) {
System.out.println(fne.getMessage());
}
}
private String getFileName(final Part part) {
final String partHeader = part.getHeader("content-disposition");
System.out.println("Part Header = {0}" + partHeader);
for (String content: part.getHeader("content-disposition").split(";")) {
if (content.trim().startsWith("filename")) {
return content.substring(
content.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
}
}
request.getPat 메서드를 이용해서 file값을 가져온다. ( parameter로는 접근 할 수 없음)
자바에서는 파일 쓰기 시에 먼저 임시 디렉터리에 파일을 저장한다. 기본 임시 디렉터리는 자바의 시스템 프로퍼티로 java.io.tmpdir로 지정되어 있고 실제 저장 위치는 System.getProperty("java.io.tmpdir"); 로 확인 할수 있다.
Get 데이터를 쿼리스트링 형식으로 전송
Post Application/x-www-formurlencoded : 데이터를 스트림 형태로 인코딩하여 전달할때 사용되는 전송방식
Multipart/form-data: 파일 업로드시 사용되는 전송 방식
파일 전송용 폼을 만들 때는 enctype="multipart/form-data" 추가
반응형
'개인공부' 카테고리의 다른 글
엔터프라이즈 어플리케이션 (0) | 2020.08.08 |
---|---|
서블릿 관련 객체들(필터,쿠키,세션) (0) | 2020.08.08 |
인터넷 페이지가 보이는 과정 (0) | 2020.08.01 |
spring 을 aws에서 실행시켜보자. (0) | 2020.07.31 |
ubuntu DB 사용법 (0) | 2020.07.31 |