這個範例我是採用上傳圖片(至少看的到),當然其他檔案格式也都可以上傳

執行結果:

27.105.20.1238888index.html - Google Chrome    

index.html ------------------------

<html>
<body>
<center>
    <h1>File Upload</h1>
    <form method="post" action="UploadServlet" enctype="multipart/form-data">
        Select file to upload: <input type="file" name="file" size="60" /><br />
        <br /> <input type="submit" value="Upload" />
    </form>
<br>
<br>
<br>
<image src="A.jpg" />
</center>
</body>
</html>
 
Main.java ------------------------

package javaapplication3;

import java.awt.Desktop;
import javax.servlet.MultipartConfigElement;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
 
public class Main {
 
    public static void main(String[] args) throws Exception {
 
        ResourceHandler rh = new ResourceHandler();
        rh.setResourceBase("."); // 讓專案底下所有檔案都可以經由 Http 取得 (例如圖片, Html檔)
 
        ServletHolder sh = new ServletHolder(new UploadServlet());
        String path = System.getProperty("user.dir"); // 取得當前專案路徑
        System.out.println("File Upload Path : " + path);
        sh.getRegistration().setMultipartConfig(new MultipartConfigElement(path)); // 使 Server 可接收檔案
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.addServlet(sh, "/UploadServlet"); // 將 UploadServlet 物件加入 Http 路徑
 
        Handler[] h = {rh, context};
        HandlerList hl = new HandlerList();
        hl.setHandlers(h);
 
        Server server = new Server(8888); // Port
        server.setHandler(hl);
        server.start();
        Desktop.getDesktop().browse(new URL("http://127.0.0.1:8080").toURI()); // 自動開啟網頁
        server.join();
 
    }
}

UploadServlet.java ------------------------

package javaapplication3;
 
import java.io.IOException;
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 * 2, // 2MB
        maxFileSize = 1024 * 1024 * 10, // 10MB
        maxRequestSize = 1024 * 1024 * 50)   // 50MB
 
public class UploadServlet extends HttpServlet {
 
    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
 
        Part p = request.getPart("file");
        p.write("A.jpg"); // 存檔在 專案路徑底下 A.jpg (路徑設定在 Main 打理的 MultipartConfigElement 中)        
//        p.write(extractFileName(p)); // 上傳檔案使用客戶端的檔案名稱 (如果要用這句,請把上面的 p.write("A.jpg"); 註解掉)

        response.sendRedirect("/index.html"); // 轉址回 index.html
 
    }

    // 取得上傳的原始檔案名稱
    private String extractFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                return s.substring(s.indexOf("=") + 2, s.length()-1);
            }
        }
        return "";
    }
 
}


//----------------------------------
上面的 UploadServlet.java 裡的 doPost() 方法也可以改用以下寫法來取代:

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
 
        HttpServletRequest r = (HttpServletRequest) req;
        Part p = r.getPart("file");
        p.write("A.jpg");
        
        ((HttpServletResponse)res) .sendRedirect("/index.html");
    }
 











arrow
arrow
    全站熱搜

    黃彥霖 發表在 痞客邦 留言(0) 人氣()