使用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ù)類型。可以為xml,script,json,html。如果不填寫,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è)置大小的話,放入內(nèi)存中,如果大于的話則放入磁盤中
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讓返回的內(nèi)容顯示在特定div里(代碼少而精悍)
之前寫過(guò)ajax讓返回的內(nèi)容顯示在特定div里最近在看jquery,所以又用jquery重新寫了個(gè),需要的朋友可以參考下2014-06-06
jquery復(fù)選框checkbox實(shí)現(xiàn)刪除前判斷
頁(yè)面有很多數(shù)據(jù),可以刪除一條或多條,刪除前判斷是否選中至少一條,否則提示,具體示例如下,需要的朋友可以參考下2014-04-04
jQuery.ajax向后臺(tái)傳遞數(shù)組問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了jQuery.ajax向后臺(tái)傳遞數(shù)組問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
jQuery時(shí)間日期三級(jí)聯(lián)動(dòng)(推薦)
這篇文章主要介紹了jQuery時(shí)間日期三級(jí)聯(lián)動(dòng)的實(shí)現(xiàn)代碼,代碼簡(jiǎn)答易懂,非常實(shí)用,需要的朋友參考下吧2016-11-11
jQuery Easyui datagrid/treegrid 清空數(shù)據(jù)
這篇文章主要介紹了jQuery Easyui datagrid/treegrid 清空數(shù)據(jù)的相關(guān)資料2016-07-07
jQuery動(dòng)態(tài)添加<input type="file">
有時(shí)候需要在頁(yè)面上允許用戶上傳多個(gè)文件,個(gè)數(shù)由用戶自己決定,個(gè)數(shù)多了也可以刪除,使用jQuery可以很簡(jiǎn)單的實(shí)現(xiàn)這個(gè)功能2016-04-04
jQuery實(shí)現(xiàn)下拉框功能實(shí)例代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)下拉框功能實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-05-05

