Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

ไฟล์ที่อัปโหลดใน JSP จะถูกเก็บที่ไหน?

JSP รองรับการอัปโหลดไฟล์ผ่าน HTML form ต้องกำหนดที่เก็บไฟล์ใน backend script

1. สร้าง HTML Upload Form

<html>
<head><title>ฟอร์มอัปโหลดไฟล์</title></head>
<body>
    <h3>อัปโหลดไฟล์:</h3>
    เลือกไฟล์: <br/>
    <form action="UploadFile.jsp" method="post" enctype="multipart/form-data">
        <input type="file" name="file" size="50" /><br/>
        <input type="submit" value="Upload File" />
    </form>
</body>
</html>

จุดสำคัญของ Form:

  • method="POST" (GET ไม่ได้)
  • enctype="multipart/form-data" (บังคับ)
  • action ชี้ไป JSP/Servlet ที่จัดการ upload
  • input type="file" สำหรับเลือกไฟล์

2. กำหนดที่เก็บไฟล์ (web.xml context-param)

<web-app>
    <context-param>
        <description>ที่เก็บไฟล์อัปโหลด</description>
        <param-name>file-upload</param-name>
        <param-value>C:/apache-tomcat/webapps/data/</param-value>
    </context-param>
</web-app>

3. Backend JSP (UploadFile.jsp) - ใช้ Apache Commons FileUpload

<%@ page import="java.io.*,java.util.*,javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<%
    int maxFileSize = 5000 * 1024;   // 5MB
    int maxMemSize = 5000 * 1024;
    
    ServletContext context = pageContext.getServletContext();
    String filePath = context.getInitParameter("file-upload");
    
    String contentType = request.getContentType();
    if (contentType != null && contentType.indexOf("multipart/form-data") >= 0) {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(maxMemSize);
        factory.setRepository(new File("C:\\temp"));
        
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxFileSize);
        
        try {
            List<FileItem> fileItems = upload.parseRequest(request);
            out.println("<html><body><h3>ผลการอัปโหลด</h3>");
            
            for (FileItem item : fileItems) {
                if (!item.isFormField()) {
                    String fileName = item.getName();
                    File file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\") + 1));
                    item.write(file);
                    out.println("อัปโหลดสำเร็จ: " + fileName + "<br/>");
                }
            }
            out.println("</body></html>");
        } catch (Exception ex) {
            out.println("Error: " + ex.getMessage());
        }
    } else {
        out.println("ไม่มีไฟล์อัปโหลด");
    }
%>

ข้อกำหนดก่อนรัน

  • เพิ่ม commons-fileupload-x.x.jar และ commons-io-x.x.jar ใน classpath (WEB-INF/lib)
  • สร้างโฟลเดอร์ C:\temp และ C:\apache-tomcat\webapps\data\ ให้มีอยู่ก่อน
  • ขนาดไฟล์ต้องไม่เกิน maxFileSize

ที่เก็บไฟล์

ไฟล์จะถูกเก็บที่ path ที่กำหนดใน file-upload context-param (ตัวอย่าง: C:/apache-tomcat/webapps/data/)

หมายเหตุ

Servlet 3.0+ (Tomcat 7+) รองรับ @MultipartConfig และ request.getPart() ไม่ต้องใช้ library ภายนอก