[JAVA] MultipartRequest File Upload
파일업로드를 하기 위해서는 oreilly.jar 를 먼저 다운받는다.
그리고 CLASSPATH 환경변수에 넣어둔다 (예: %CATALINA_HOME%\lib\oreilly.jar)
1. 클라이언트 단(Ajax)
<form method="post" action="/upload_test.do" enctype="multipart/form-data">
제목: <input type="text" name="title">
파일: <input type="file" name="upfile">
<input type="submit" value="Upload">
</form>
2. 백엔드 단(java)
package com.file;
import java.io.*;
import java.util.Date;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
public class Upload extends HttpServlet {
/*@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
process(req, resp);
}*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
process(req, resp);
}
//처리내용
protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
String fsl = File.separator;
// 30Mbyte 제한
int maxSize = 1024*1024*30;
// 웹서버 컨테이너 경로
String root = req.getSession().getServletContext().getRealPath(fsl);
// 파일 저장 경로
String rootPath = root + "Uploads" + fsl;
// 업로드 파일명
String uploadFile = "";
// 실제 저장할 파일명
String newFileName = "";
int read = 0;
byte[] buf = new byte[1024];
FileInputStream fin = null;
FileOutputStream fout = null;
long currentTime = System.currentTimeMillis();
SimpleDateFormat simDf = new SimpleDateFormat("yyyyMMddHHmmss");
try{
MultipartRequest multi = new MultipartRequest(req, rootPath, maxSize, "UTF-8", new DefaultFileRenamePolicy());
// 전송받은 parameter의 한글깨짐 방지
String title= multi.getParameter("title");
title= new String(savePath.getBytes("8859_1"), "UTF-8");
// 파일업로드
uploadFile = multi.getFilesystemName("upfile");
// 실제 저장할 파일명(ex : 20140819151221.zip)
newFileName = simDf.format(new Date(currentTime)) +"."+ uploadFile.substring(uploadFile.lastIndexOf(".")+1);
// 업로드된 파일 객체 생성
File oldFile = new File(rootPath + uploadFile);
// 실제 저장될 파일 객체 생성
File newFile = new File(rootPath + newFileName);
// 파일명 rename
if(!oldFile.renameTo(newFile)){
//rename이 되지 않을경우 강제로 파일을 복사하고 기존파일은 삭제
buf = new byte[1024];
fin = new FileInputStream(oldFile);
fout = new FileOutputStream(newFile);
read = 0;
while((read=fin.read(buf,0,buf.length))!=-1){
fout.write(buf, 0, read);
}
fin.close();
fout.close();
oldFile.delete();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
'백엔드' 카테고리의 다른 글
[JAVA] hashMap key값으로 value 찾기 value로 key값 찾기 (0) | 2022.02.23 |
---|---|
[JAVA] unchecked or unsafe operations (0) | 2021.06.01 |
[JAVA] MultipartParser 파일 저장경로를 파라메터로 받아서 업로드하기 (0) | 2021.06.01 |
서블릿에서 HTTP Request Body 읽기 (0) | 2021.05.20 |
MYSQL DATEDIFF, TIMEDIFF 로 날짜 시간 계산하기 (0) | 2021.05.20 |