使用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 相关文章推荐
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
Sep 10 Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
javascript框架设计读书笔记之数组的扩展与修复
Dec 02 Javascript
浅谈javascript面向对象程序设计
Jan 21 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
超全面的javascript中变量命名规则
Feb 09 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 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入门小知识
2008/03/24 PHP
php实现中文转数字
2016/02/18 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
浅述python中深浅拷贝原理
2018/09/18 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
django框架F&amp;Q 聚合与分组操作示例
2019/12/12 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
积极贯彻学习两会精神总结
2014/03/17 职场文书
实践单位评语
2014/04/26 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
干部考核工作总结
2015/08/12 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书