JQuery 實現文件上傳

簡述:javascript

實現前端使用jquery上傳文件php

後臺用servlet處理文件上傳以及保存css


知識點:html

1. 用到ajaxfileupload.js庫前端

2. 後臺servlet文件保存java


其中ajaxfileupload的庫下載地址:jquery

http://www.phpletter.com/download_project_version.php?version_id=34
web


Maven中須要添加兩個java的庫,用來上傳以及在服務器保存文件
ajax

[html] view plaincopyapache

  1. <dependency>  

  2.     <groupId>commons-fileupload</groupId>  

  3.     <artifactId>commons-fileupload</artifactId>  

  4.     <version>1.2.2</version>  

  5. </dependency>  

  6. <dependency>  

  7.     <groupId>org.apache.commons</groupId>  

  8.     <artifactId>commons-io</artifactId>  

  9.     <version>1.3.2</version>  

  10. </dependency>  




項目結構(主要是js)



testUpload.html

[html] view plaincopy

  1. <!DOCTYPE html>  

  2. <head>  

  3. <title>MyWebProject</title>  

  4. <meta charset="utf-8" />  

  5. <link type="text/css" href="./lib/css/jquery-ui-1.8.19.custom.css"  

  6.     rel="stylesheet" />  

  7.     <link type="text/css" href="./lib/css/ajaxfileupload.css"  

  8.     rel="stylesheet" />  

  9. <script type="text/javascript" src="./lib/js/jquery-1.8.3.js"></script>  

  10. <script type="text/javascript" src="./lib/js/ajaxfileupload.js"></script>  

  11. <script type="text/javascript">  

  12. function ajaxFileUpload() {  

  13.     $.ajaxFileUpload({  

  14.         url : "./UploadFile",   //submit to UploadFileServlet  

  15.         secureuri : false,  

  16.         fileElementId : 'fileToUpload',  

  17.         dataType : 'text', //or json xml whatever you like~  

  18.         success : function(data, status) {  

  19.             $("#result").append(data);  

  20.         },  

  21.         error : function(data, status, e) {  

  22.             $("#result").append(data);  

  23.         }  

  24.     });  

  25.     return false;  

  26. }  

  27. </script>  

  28. </head>  

  29.   

  30. <body>  

  31.     <!-- upload file -->  

  32.     <form name="form" action="./UploadFile" method="POST" enctype="multipart/form-data">  

  33.         <table class="tableForm">  

  34.             <thead>  

  35.                 <tr>  

  36.                     <th>JQuery Ajax File Upload</th>  

  37.                 </tr>  

  38.             </thead>  

  39.             <tbody>  

  40.                 <tr>  

  41.                     <td><input id="fileToUpload"  type="file" size="45"   

  42.                         name="fileToUpload"  class="input"></td>  

  43.                 </tr>  

  44.             </tbody>  

  45.             <tfoot>  

  46.                 <tr>  

  47.                     <td><button class="button" id="buttonUpload"  

  48.                             onclick="return ajaxFileUpload();">Upload</button></td>  

  49.                 </tr>  

  50.             </tfoot>  

  51.         </table>  

  52.         <div id="result" style="margin-left:200px"></div>  

  53.     </form>  

  54. </body>  

  55. </html>  


後臺實現:

參考:http://blog.163.com/lin305_gf/blog/static/969524402011718102116625/

UploadFileServlet.java

[java] view plaincopy

  1. package mwp.servlet;  

  2.   

  3. import java.io.File;  

  4. import java.io.IOException;  

  5. import java.util.Iterator;  

  6.   

  7. import javax.servlet.ServletException;  

  8. import javax.servlet.http.HttpServlet;  

  9. import javax.servlet.http.HttpServletRequest;  

  10. import javax.servlet.http.HttpServletResponse;  

  11.   

  12. import org.apache.commons.fileupload.FileItem;  

  13. import org.apache.commons.fileupload.FileItemFactory;  

  14. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  

  15. import org.apache.commons.fileupload.servlet.ServletFileUpload;  

  16. import org.slf4j.Logger;  

  17. import org.slf4j.LoggerFactory;  

  18.   

  19. /** 

  20.  * Servlet implementation class UploadFileServlet 

  21.  */  

  22. public class UploadFileServlet extends HttpServlet {  

  23.     private static final long serialVersionUID = 1L;  

  24.     private static Logger logger = LoggerFactory.getLogger(UploadFileServlet.class);  

  25.   

  26.     /** 

  27.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 

  28.      */  

  29.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

  30.         request.setCharacterEncoding("utf-8");  

  31.         //判斷提交過來的表單是否爲文件上傳菜單  

  32.         boolean isMultipart= ServletFileUpload.isMultipartContent(request);  

  33.         if(isMultipart){  

  34.             //構造一個文件上傳處理對象  

  35.             FileItemFactory factory = new DiskFileItemFactory();  

  36.             ServletFileUpload upload = new ServletFileUpload(factory);  

  37.   

  38.             Iterator items;  

  39.             try{  

  40.                 //解析表單中提交的全部文件內容  

  41.                 items = upload.parseRequest(request).iterator();  

  42.                 while(items.hasNext()){  

  43.                     FileItem item = (FileItem) items.next();  

  44.                     if(!item.isFormField()){  

  45.                         //取出上傳文件的文件名稱  

  46.                         String name = item.getName();  

  47.                         //取得上傳文件之後的存儲路徑  

  48.                         String fileName = name.substring(name.lastIndexOf('\\') + 1, name.length());  

  49.                         //上傳文件之後的存儲路徑  

  50.                         String saveDir = this.getServletContext().getRealPath("/upload/");  

  51.                         if (!(new File(saveDir).isDirectory())){  

  52.                             new File(saveDir).mkdir();  

  53.                         }  

  54.                         String path= saveDir + File.separatorChar + fileName;  

  55.   

  56.                         //上傳文件  

  57.                         File uploaderFile = new File(path);  

  58.                         item.write(uploaderFile);  

  59.                     }  

  60.                 }  

  61.             }catch(Exception e){  

  62.                 e.printStackTrace();  

  63.                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);    

  64.                 return;    

  65.             }  

  66.             response.setStatus(HttpServletResponse.SC_OK);  

  67.             response.getWriter().append("Success Upload");  

  68.         }   

  69.     }   

  70. }  


測試界面:


如若數據交換格式是JSON,則以下示例

JS

[javascript] view plaincopy

  1. /** 

  2.  * 上傳圖片 

  3.  */  

  4. function uploadUnitImage()  {  

  5.         showLoading("正在上傳,請等待...");  

  6.         $.ajaxFileUpload  

  7.         (  

  8.             {  

  9.                 url:'/my-web/fileUpload?action=uploadImage',//用於文件上傳的服務器端請求地址,目前與優惠券上傳圖片請求地址一致  

  10.                 secureuri:false,//通常設置爲false  

  11.                 fileElementId: 'unitImageToUpload'//文件上傳空間的id屬性  

  12.                 dataType: 'json',//返回值類型 通常設置爲json  

  13.                 success: function (data, status)  //服務器成功響應處理函數  

  14.                 {  

  15.                     if(typeof(data.error) != 'undefined')  

  16.                     {  

  17.                         if(data.error != '')  

  18.                         {  

  19.                             alert(data.error);  

  20.                             dismissLoading();  

  21.                         }else  

  22.                         {  

  23.                             //若上傳成功則自定義一些事  

  24.                             // do something  

  25.                         }  

  26.                     }  

  27.                 },  

  28.                 error: function (data, status, e)//服務器響應失敗處理函數  

  29.                 {  

  30.                     alert(e);  

  31.                     dismissLoading();  

  32.                 }  

  33.             }  

  34.         )  

  35. }  



JAVA

[java] view plaincopy

  1. public void uploadImage(  

  2.         HttpServletRequest request,HttpServletResponse response) throws Exception{  

  3.     logger.debug("上傳圖片");  

  4.     //上傳圖片  

  5.     String fileUrl=uploadFileAndGetFileUrl(request);  

  6.     String responseText = "";  

  7.     if(!StringUtils.isEmpty(fileUrl)){  

  8.         logger.debug("圖片下載地址是"+fileUrl);  

  9.          responseText="{error: '',url: '"+fileUrl+"'}";  

  10.     }else{  

  11.         logger.debug("帳戶建立頁面,圖片上傳失敗");  

  12.         responseText="{error: ''}";  

  13.     }  

  14.       

  15.     responseOutWithText(response, responseText);  

  16. }  


因爲AjaxFileUpload在解析返回的response若爲JSON數據時會出現問題,因此須要轉爲text

[java] view plaincopy

  1. /** 

  2.  * 以文本形式下發數據 

  3.  * @param response 

  4.  * @param responseText 

  5.  */  

  6. protected void responseOutWithText(HttpServletResponse response,  

  7.         String responseText) {  

  8.     response.setCharacterEncoding("UTF-8");  

  9.     response.setContentType("text/html");  

  10.     PrintWriter out = null;  

  11.     try {  

  12.         out = response.getWriter();  

  13.         out.println(responseText);  

  14.         out.close();  

  15.         logger.debug("下發的數據是");  

  16.         logger.debug(responseText);  

  17.     } catch (IOException e) {  

  18.         // TODO Auto-generated catch block  

  19.         e.printStackTrace();  

  20.     } finally {  

  21.         if (out != null) {  

  22.             out.close();  

  23.         }  

  24.     }  

  25. }  

相關文章
相關標籤/搜索