這個範例我是採用上傳圖片(至少看的到),當然其他檔案格式也都可以上傳
執行結果:
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()); // 自動開啟網頁
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("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() 方法也可以改用以下寫法來取代:
//----------------------------------
上面的 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");
}
全站熱搜