使用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 相关文章推荐
用js得到网页中所有的div的id
Oct 19 Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 Javascript
基于jquery的tab切换 js原理
Apr 01 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
浅谈document.write()输出样式
May 07 Javascript
基于JS实现简单的样式切换效果代码
Sep 04 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
mpvue将vue项目转换为小程序
Sep 30 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
Feb 15 Javascript
JavaScript回调函数callback用法解析
Jan 14 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
Zerg建筑一览
2020/03/14 星际争霸
php 获取可变函数参数的函数
2009/08/26 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Python作用域用法实例详解
2016/03/15 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python中print和return的作用及区别解析
2019/05/05 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
深入了解Python enumerate和zip
2020/07/16 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
中国文明网签名寄语
2014/01/18 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
redis数据一致性的实现示例
2022/03/18 Redis
进行数据处理的6个 Python 代码块分享
2022/04/06 Python