使用ajaxfileupload.js实现上传文件功能


Posted in Javascript onAugust 13, 2016

一直以来上传文件都是使用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;
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习YUI.Ext 第七天--关于View&amp;JSONView
Mar 10 Javascript
JavaScript中两种链式调用实现代码
Jan 12 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
Jun 06 Javascript
js图片模糊切换显示特效的方法
Feb 17 Javascript
jQuery插件jPaginate实现无刷新分页
May 04 Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 Javascript
JavaScript中日期函数的相关操作知识
Aug 03 Javascript
js replace 全局替换的操作方法
Jun 12 Javascript
使用RxJS更优雅地进行定时请求详析
Jun 02 Javascript
Vue如何实现监听组件原生事件
Jul 03 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
Aug 13 #Javascript
漂亮! js实现颜色渐变效果
Aug 12 #Javascript
jQuery ztree实现动态树形多选菜单
Aug 12 #Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 #Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 #Javascript
Javascript中的对象和原型(二)
Aug 12 #Javascript
JavaScript中的对象和原型(一)
Aug 12 #Javascript
You might like
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
angular.element方法汇总
2015/01/07 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
简单介绍Python中的floor()方法
2015/05/15 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
三星英国官网:Samsung英国
2018/09/25 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
药品质量检测应届生求职信
2013/11/14 职场文书
颁奖典礼主持词
2014/03/25 职场文书
超市理货员岗位职责
2014/07/04 职场文书
信用卡工资证明范本
2014/10/17 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
2016教师国培研修感言
2015/12/08 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL