編輯上傳文件的頁面upload.html
注意事項:上傳方式使用POST不能使用GET(GET不能上傳文件)
表單enctype 屬性應該設置為multipart/form-data.(表示提交的數據是二進製文件)
upload.html
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>文件上傳</title></head><body> <form action="UploadPhotoServlet" method="POST" enctype="multipart/form-data"> 人物名稱:<input type="text" name="heroName"/><br> 上傳頭像:<input type="file" name="filepath"/><br> <input type="submit" value="上傳"> </form></body></html>
UPloadPtotoServlet文件上傳類--上傳功能的開發
將commons-io-1.4.jar和commons-fileupload-1.2.2.jar 兩個jar包放到WEB-INF/lib 目錄下。
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class UploadPhotoServlet */@WebServlet("/UploadPhotoServlet")public class UploadPhotoServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadPhotoServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub// response.getWriter().append("Served at: ").append(request.getContextPath()); String filename=null; DiskFileItemFactory factory=new DiskFileItemFactory(); //磁盤文件條目工廠ServletFileUpload upload=new ServletFileUpload(factory); //負責處理上傳的文件數據,並將表單中每個輸入項封裝成一個fileitem對像中//設置上傳文件的大小為10M factory.setSizeThreshold(2*1024*1024); List items=null; try { //parse 解析items=upload.parseRequest(request); //得到一個保存了所有上傳內容的List對象} catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } Iterator iter=items.iterator(); //迭代上傳的文件數據while(iter.hasNext()){ FileItem item=(FileItem) iter.next(); if(!item.isFormField()){ //如果不是上傳的//根據時間戳創建頭像文件filename=System.currentTimeMillis()+".jpg"; //通過getrealpath獲取上傳文件夾,如果項目存在將存在當前項目下不存在的話創建項目文件夾//圖片文件夾String photoFolder=request.getServletContext().getRealPath("uploaded"); File f=new File(photoFolder,filename); f.getParentFile().mkdirs(); //如果父文件夾不存在則自動創建//通過item.getInputStream() 獲取瀏覽器上傳的文件InputStream is = item.getInputStream(); //將文件讀進來//複製文件FileOutputStream fos=new FileOutputStream(f); //往界面上顯示byte[] b=new byte[2*1024*1024]; int len=0; while((len=is.read(b))!=-1){ fos.write(b, 0, len); } fos.close(); }else{ System.out.println(item.getFieldName());//heroName String value=item.getString(); value=new String(value.getBytes("ISO-8859-1"), "UTF-8"); System.out.println(value); //桑葚} } String html="<img width='200' height='150' src='uploaded/%s'/>"; response.setContentType("text/html"); PrintWriter pw=response.getWriter(); pw.format(html, filename); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}運行結果:
總結
以上所述是小編給大家介紹的J2EE Servlet上傳文件到服務器並相應顯示功能的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!