使用ajaxfileupload.js實(shí)現(xiàn)上傳文件功能
一直以來(lái)上傳文件都是使用form表單上傳文件,也看到過(guò)有人使用js上傳文件,不過(guò)看起來(lái)蠻簡(jiǎn)單的也就沒(méi)有怎么去理會(huì)。今天突然要使用這種方式上傳文件,期間還遇到點(diǎn)問(wèn)題。因此就記錄下來(lái),方便以后遇到這樣的問(wèn)題可以查看。
首先就是引入js和ajaxfileupload的文件,這個(gè)不需要多說(shuō)。
然后就是ajax請(qǐng)求后臺(tái)地址。代碼如下:
<div class="btn-file-box pos-rel"> <input type="file" id="upload" name="upload" style="font-size: 0;opacity: 0;width: 100%;height: 100%;position: absolute;left: 0;top: 0;"/> <span class="btn ">選擇文件</span> </div> $("#upload").on("change",function(){ $.ajaxFileUpload({ url : '/test/user/imgUpload',//后臺(tái)請(qǐng)求地址 type: 'post',//請(qǐng)求方式 當(dāng)要提交自定義參數(shù)時(shí),這個(gè)參數(shù)要設(shè)置成post secureuri : false,//是否啟用安全提交,默認(rèn)為false。 fileElementId : 'upload',// 需要上傳的文件域的ID,即<input type="file">的ID。 dataType : 'json',//服務(wù)器返回的數(shù)據(jù)類(lèi)型。可以為xml,script,json,html。如果不填寫(xiě),jQuery會(huì)自動(dòng)判斷。如果json返回的帶pre,這里修改為json即可解決。 success : function (json, status) {//提交成功后自動(dòng)執(zhí)行的處理函數(shù),參數(shù)data就是服務(wù)器返回的數(shù)據(jù)。 alert(json.retMsg); }, error : function (json, status, e) {//提交失敗自動(dòng)執(zhí)行的處理函數(shù)。 } }); });
前臺(tái)代碼完成就開(kāi)始開(kāi)發(fā)后臺(tái)代碼了。
package com.roc.test;import java.io.File;import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import net.sf.json.JSONObject; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.jboss.resteasy.annotations.providers.jaxb.json.BadgerFish; import org.springframework.stereotype.Controller;import net.sf.json.JSONObject;/** * 上傳文件 * @author liaowp * */ @Controller @Path("/user") public class UploadImg { @Path("/imgUpload") @POST @Produces("application/json; charset=utf-8") @Consumes(MediaType.MULTIPART_FORM_DATA ) @BadgerFish public JSONObject upload(@QueryParam("orderId") String orderId,@Context HttpServletRequest request,@Context HttpServletResponse response) { JSONObject jsonobj = new JSONObject(); String file_path=request.getSession().getServletContext().getRealPath("/")+File.separator+"corpfile"+File.separator;//文件存儲(chǔ)路徑 String upload_file_path=""; File file =new File(file_path); if(!file.exists() && !file.isDirectory()){ //如果文件夾不存在則創(chuàng)建 file.mkdir(); upload_file_path=file_path; }else{ upload_file_path=file_path; } DiskFileItemFactory factory = new DiskFileItemFactory(); // 設(shè)置工廠 factory.setRepository(new File(file_path));// 設(shè)置文件存儲(chǔ)位置 factory.setSizeThreshold(2048 * 1024);// 設(shè)置大小,如果文件小于設(shè)置大小的話(huà),放入內(nèi)存中,如果大于的話(huà)則放入磁盤(pán)中 ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("utf-8");// 這里就是中文文件名處理的代碼,其實(shí)只有一行 String fileName = ""; List<FileItem> list; JSONObject jsonobj = new JSONObject(); try { list = upload.parseRequest(request); for (FileItem item : list) { if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString("utf-8"); } else { String name = item.getFieldName(); String value = item.getName(); fileName =name + ".jpg"; if (item.getSize() > 10485760) {//您好,上傳文件要小于10M! jsonobj.put("retCode","100"); jsonobj.put("retMsg","您好,上傳文件要小于10M!"): } else {//上傳成功 item.write(new File(upload_file_path, fileName)); System.out.println(File.separator + "corpfile" + File.separator + fileName); jsonobj.put("retCode","0"); jsonobj.put("retMsg","您好,上傳成功!"); } } } } catch (Exception e) {//上傳失敗 e.printStackTrace(); jsonobj.put("retCode","9999"); jsonobj.put("retMsg","您好,文件上傳失敗,"); } return jsonobj; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jquery 新手學(xué)習(xí)常見(jiàn)問(wèn)題解決方法
jquery 新手入門(mén)參考教程。2010-04-04JQuery判斷正整數(shù)整理小結(jié)(jQuery 文本框中只能輸入正整數(shù))
這篇文章主要介紹了JQuery判斷正整數(shù),附上詳細(xì)的代碼供大家查看具體的方法,需要的朋友可以參考下2017-08-08jQuery插件zTree實(shí)現(xiàn)的基本樹(shù)與節(jié)點(diǎn)獲取操作示例
這篇文章主要介紹了jQuery插件zTree實(shí)現(xiàn)的基本樹(shù)與節(jié)點(diǎn)獲取操作,結(jié)合實(shí)例形式分析了jQuery樹(shù)形插件zTree構(gòu)造基本樹(shù)與針對(duì)節(jié)點(diǎn)的獲取操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03jQuery簡(jiǎn)易時(shí)光軸實(shí)現(xiàn)方法示例
這篇文章主要介紹了jQuery簡(jiǎn)易時(shí)光軸實(shí)現(xiàn)方法,可實(shí)現(xiàn)點(diǎn)擊底部鏈接動(dòng)態(tài)加載內(nèi)容的功能,涉及jQuery響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03jQuery Mobile漏洞會(huì)有跨站腳本攻擊風(fēng)險(xiǎn)
人們經(jīng)常將跨站腳本攻擊(Cross Site Scripting)縮寫(xiě)為CSS,但這會(huì)與層疊樣式表(Cascading Style Sheets, CSS)的縮寫(xiě)混淆。因此有人將跨站腳本攻擊縮寫(xiě)為XSS。2017-02-02