这篇文章主要为大家详细介绍了使用 ajaxfileupload.js 实现上传文件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
一直以来上传文件都是使用 form 表单上传文件,也看到过有人使用 js 上传文件,不过看起来蛮简单的也就没有怎么去理会。今天突然要使用这种方式上传文件,期间还遇到点问题。因此就记录下来,方便以后遇到这样的问题可以查看。
首先就是引入 js 和 ajaxfileupload 的文件,这个不需要多说。
然后就是 ajax 请求后台地址。代码如下:
- <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',//后台请求地址
- type: 'post',//请求方式 当要提交自定义参数时,这个参数要设置成post
- secureuri : false,//是否启用安全提交,默认为false。
- fileElementId : 'upload',// 需要上传的文件域的ID,即<input type="file">的ID。
- dataType : 'json',//服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。如果json返回的带pre,这里修改为json即可解决。
- success : function (json, status) {//提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
- alert(json.retMsg);
- },
- error : function (json, status, e) {//提交失败自动执行的处理函数。
- }
- });
- });
前台代码完成就开始开发后台代码了。
- 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;//文件存储路径
- String upload_file_path="";
- File file =new File(file_path);
- if(!file.exists() && !file.isDirectory()){ //如果文件夹不存在则创建
- file.mkdir();
- upload_file_path=file_path;
- }else{
- upload_file_path=file_path;
- }
- DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置工厂
- factory.setRepository(new File(file_path));// 设置文件存储位置
- factory.setSizeThreshold(2048 * 1024);// 设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中
- ServletFileUpload upload = new ServletFileUpload(factory);
- upload.setHeaderEncoding("utf-8");// 这里就是中文文件名处理的代码,其实只有一行
- 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;
- }
- }
来源: http://www.phperz.com/article/17/0312/263615.html