** πνμΌ μ
λ‘λ ꡬν **
JSP + Servlet νκ²½μμ μ΄λ―Έμ§, 첨λΆνμΌ λ±μ μ
λ‘λνκ³
μλ²μ μμ νκ² μ μ₯νλ μ 체 νλ¦κ³Ό μμ μμ μ 리
π§© λͺ©μ°¨
- κ°λ
: νμΌ μ
λ‘λλ?
- μ 체 νλ¦λ
- enctype=βmultipart/form-dataβλ?
- μ
λ‘λ μ²λ¦¬ λ°©λ² (cos.jar or commons-fileupload μ¬μ©)
- μ€μ μμ μ½λ
- μ μ₯ κ²½λ‘ λ° νμΌλͺ
μ²λ¦¬
- κΈ°μ λ©΄μ λλΉ ν΅μ¬ μμ½
- λ§λ¬΄λ¦¬ μμ½ + Notion μμ± ν
β
1. κ°λ
: νμΌ μ
λ‘λλ?
νλͺ© |
μ€λͺ
|
μ μ |
μ¬μ©μκ° λΈλΌμ°μ μμ μ νν νμΌμ μλ²λ‘ μ μ‘νκ³ μ μ₯νλ κ³Όμ |
μ¬μ© λͺ©μ |
νλ‘ν μ΄λ―Έμ§, κ²μν 첨λΆνμΌ, λ¬Έμ μ
λ‘λ λ± |
μ²λ¦¬ λ°©μ |
<form> νκ·Έμμ enctype="multipart/form-data" μ¬μ© νμ |
β
2. μ 체 νλ¦λ
[1] form.jsp
β¬ (νμΌ μ ν + form μ μ‘)
[2] UploadServlet
β¬ (MultipartRequest μ²λ¦¬)
[3] μλ² κ²½λ‘μ νμΌ μ μ₯
β¬
[4] DBμ νμΌλͺ
μ μ₯ or νλ©΄ μΆλ ₯
νλͺ© |
μ€λͺ
|
μν |
νμΌμ ν¬ν¨ν form λ°μ΄ν°λ₯Ό μΌλ° ν
μ€νΈκ° μλ λ°μ΄λ리 νμμΌλ‘ μ μ‘ |
νμ 쑰건 |
<form method="post" enctype="multipart/form-data"> μ€μ μλ§ νμΌ μ μ‘ κ°λ₯ |
β
4. μ
λ‘λ μ²λ¦¬ λ°©λ²
β
κ°μ₯ λ§μ΄ μ°λ λ°©λ²: cos.jar (MultipartRequest)
νλͺ© |
μ€λͺ
|
ν΄λμ€ |
com.oreilly.servlet.MultipartRequest |
νμ λΌμ΄λΈλ¬λ¦¬ |
cos.jar (μΉ νλ‘μ νΈ /WEB-INF/lib μ μΆκ°) |
μ₯μ |
κ°λ¨νκ² νμΌ μ μ₯ κ°λ₯, λ³λ Servlet μ€μ λΆνμ |
λ¨μ |
λμ©λ νμΌ, νμΌ νν° λ± κ³ κΈ κΈ°λ₯ λΆμ‘± |
β
5. μ€μ μμ μ½λ
π [1] upload.jsp (μ
λ‘λ νΌ)
<form action="upload" method="post" enctype="multipart/form-data">
νμΌ μ ν: <input type="file" name="uploadFile" /><br />
<input type="submit" value="μ
λ‘λ" />
</form>
π [2] UploadServlet.java
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String savePath = request.getServletContext().getRealPath("/upload"); // μ μ₯ ν΄λ κ²½λ‘
int maxSize = 10 * 1024 * 1024; // μ΅λ 10MB
String encoding = "UTF-8";
// cos.jar κΈ°λ° MultipartRequest κ°μ²΄ μμ±
MultipartRequest multi = new MultipartRequest(
request,
savePath,
maxSize,
encoding,
new DefaultFileRenamePolicy() // μ€λ³΅ μ νμΌλͺ
μλ λ³κ²½
);
// input name="uploadFile"μ νμΌ μ΄λ¦ μ»κΈ°
String fileName = multi.getFilesystemName("uploadFile");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<h3>μ
λ‘λ μλ£: " + fileName + "</h3>");
}
}
β
νλ‘μ νΈμ cos.jar μΆκ° λ°©λ²
- cos.jar λ€μ΄λ‘λ λ§ν¬
/WEB-INF/lib/
ν΄λμ λ£κΈ°
- νλ‘μ νΈ μ¬λΉλ (μ΄ν΄λ¦½μ€, IntelliJ λ±μμ)
β
6. μ μ₯ κ²½λ‘ λ° νμΌλͺ
μ²λ¦¬ ν
νλͺ© |
μμ/μ€λͺ
|
μ μ₯ κ²½λ‘ |
getServletContext().getRealPath("/upload") = μλ²μ μ€μ κ²½λ‘ |
μ€λ³΅ λ°©μ§ |
DefaultFileRenamePolicy() β μλμΌλ‘ νμΌλͺ
λ³κ²½ (μ: photo.png β photo1.png) |
DB μ μ₯ μ |
νμΌλͺ
μ DBμ μ μ₯νλ©΄ μ΄ν λ€μ΄λ‘λ/μΆλ ₯μ νμ© κ°λ₯ |
β
7. κΈ°μ λ©΄μ λλΉ ν΅μ¬ μμ½ π¬
μ§λ¬Έ |
μμ μ 리 |
νμΌ μ
λ‘λ μ form μ€μ μ? |
method=βpostβ + enctype=βmultipart/form-dataβ |
Servletμμ νμΌ μ²λ¦¬ ν΄λμ€λ? |
MultipartRequest (cos.jar) |
μ μ₯ κ²½λ‘λ μ΄λ»κ² ꡬνλμ? |
getServletContext().getRealPath("/ν΄λ") |
νμΌ μ€λ³΅ μ μ²λ¦¬ λ°©λ²μ? |
DefaultFileRenamePolicy() λλ UUID νμ© |
cos.jar λ§κ³ λ€λ₯Έ λ°©λ²μ? |
Apache commons-fileupload , Spring Multipart μ§μ λ± |
β
8. λ§λ¬΄λ¦¬ μμ½ π§
- π νμΌ μ
λ‘λλ Multipart/form-dataλ‘ μ²λ¦¬
- π§ μλ²μμλ MultipartRequestλ‘ νμ± ν μ μ₯
- π νμΌλͺ
, κ²½λ‘λ λ°λμ DBλ λ³μλ‘ μ μ₯ν΄μ κ΄λ¦¬
- β
νμΌ μ
λ‘λ ꡬνμ κ²μν, νλ‘ν μ΄λ―Έμ§, μλ£μ€ λ±μμ κΈ°λ³Έ κΈ°μ