使用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 相关文章推荐
用于自动添加Digg This!按钮的JavaScript
Dec 23 Javascript
JQuery 确定css方框模型(盒模型Box Model)
Jan 22 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
jQuery DOM操作实例
Mar 05 Javascript
javascript实现动态改变层大小的方法
May 14 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 Javascript
JavaScript实现简单的弹窗效果
May 19 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
本科生详细的自我评价
2013/09/19 职场文书
工程预算与管理应届生求职信
2013/10/06 职场文书
教师岗位职责范本
2013/12/29 职场文书
2014全国两会心得体会
2014/03/17 职场文书
员工保密承诺书
2014/05/28 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
教师聘用意向书
2015/05/11 职场文书
2015年暑假生活总结
2015/07/13 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Java存储没有重复元素的数组
2022/04/29 Java/Android
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL