해당 파일 첨부 기능을 활성화하는 프로세서입니다
해당 파일은 최대 5MB까지 첨부가 가능하며, 해당 파일전송은 io_ok.do로 전달됩니다
io_ok에서 web경로로 notice라는 디렉토리에 해당 파일이 저장되도록 코드를 작성하시오
io.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹에 파일 전송</title>
</head>
<body>
<!-- multi-part/form-data : 첨부파일 사용시 무조건 form 적용해야함 -->
<form id="frm" method="post" action="./io_ok.do" enctype="multipart/form-data">
파일 첨부 :<input type="file" name="mfile" accept="image/*"><br>
<input type="button" value="업로드" onclick="file_check()">
</form>
</body>
<script>
function file_check() {
var finfo = frm.mfile.files;
if (finfo[0].size > 5242880) {
alert("첨부파일 용량이 5MB 이상입니다.");
} else {
frm.submit();
}
}
</script>
</html>
io_ok.java (servlet)
package review;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@MultipartConfig( //첨부파일 환경설정
fileSizeThreshold = 1024 * 1024 * 5 //한개의 파일 전송 크기 : 5MB
)
public class io_ok extends HttpServlet {
private static final long serialVersionUID = 1L;
PrintWriter pw = null;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
try {
this.pw = response.getWriter();
Part mfile = request.getPart("mfile");
String filename = mfile.getSubmittedFileName();
long filesize = mfile.getSize(); //파일 용량 크기
if(filesize > 5242880) {
this.pw.write("<script>"
+ "alert('파일 첨부 용량은 최대 5MB까지 입니다.');"
+ "history.go(-1);"
+ "</script>");
}
else {
String url = request.getServletContext().getRealPath("/notice/");
mfile.write(url + filename);
this.pw.write("<script>"
+ "alert('정상적으로 파일 업로드되었습니다.');"
+ "history.go(-1);"
+ "</script>");
}
} catch (Exception e) {
System.out.println(e);
this.pw.write("<script>"
+ "alert('올바른 접근방식이 아닙니다.');"
+ "history.go(-1);"
+ "</script>");
} finally {
this.pw.close();
}
}
}
⭐️ 파일 전송시 주의사항!
- form
- method는 무조건 post
- enctype="multipart/form-data" 속성 필수
- servlet
- @MultipartConfig 필수
- 파일의 변수명은 Part