解析ajaxFileUpload 异步上传文件简单使用

这里就简单介绍下ajaxFileUpload,jQuery插件AjaxFileUpload可以实现ajax文件上传。我们的项目采用的是jsp跟js分离的架构,所以代码如下。

首先是jsp部分:

<!-- <form method="post"> -->
    <input type="file" name="n_file" id="fileToUpload" value="上传表格" />
     <button id="upload1" class="btn btn-default">上传</button>
<!-- </form> --> 

这里说下 为什么把form注释了,因为我的jsp中已经有了另外一个form 在调试过程中发现可能有冲突就把form注释了,事实证明ajaxFileUpload 不用form表单一样可以提交,下面就是js代码部分:

$(function(){
  //点击打开文件选择器
  $("#upload1").on('click', function() {
    //选择文件之后执行上传  

    $.ajaxFileUpload({
      url:'supplyDataReportUploadExcel', //url自己写
      secureuri:false, //这个是啥没啥用
      type:'post',
      fileElementId:'fileToUpload',//file标签的id
      dataType: 'json',//返回数据的类型
      //data:{name:'logan'},//一同上传的数据
      success: function (data, status) {
//       alert(data);
//       alert(data.msg);
//       alert(data.success);
        if(data.success){
          alert("upload,success!!!");
          window.location.href='supplyDataReport';
        }else{
          alert(data.msg);
          window.location.href='supplyDataReport';
        } 

      }/*,
      error: function (data, status, e) {
        alert(e);
      }*/
    });  

  });  

});

本人js不好,只是会用这个js不能完全copy走,要结合项目结构的实际情况,不过大体参数干什么的注释都写了。一定注意type是post跟请求对应的Controller的方法的method=RequestMethod.POST 一致。注意dataType:'json'  ,一定注意json的大小写。

ps:这里要说一下我用的data.success做的判断跟后面的一个实体类AjaxJson有关系,注意!!!!!

对了 jsp中还需要引入 对应的js如下:

<script type="text/javascript">Core.js('./js/iface/upload');</script>
<script type="text/javascript" src="libs/jquery/ajaxfileupload.js"></script> 

第一段引入的upload 就是上面js的内容,我们的引入js已经被封装好了,所以直接写那就行,具体结合实际情况 ,下面的要用到的jQuery插件AjaxFileUpload的js文件。

接下来是Controller方法如何相应:

@SuppressWarnings("resource")
@RequestMapping(value = "/supplyDataReportUploadExcel", method = RequestMethod.POST)
public @ResponseBody String supplyDataReportUploadExcel(HttpServletRequest request, HttpServletResponse response,MultipartFile n_file) throws Exception {
  AjaxJson json = new AjaxJson();
  ObjectMapper mapper = new ObjectMapper();
  UploadFormBackVo uploadFormBackVo = new UploadFormBackVo();
  //判断是否是空的Excel 包括没有标题
  if(n_file.getSize()>0){
    try{
      //先判断 文件名 是否符合规格 因为不知道怎么获取上传文件的路径 后期修改
      //获取文件
      //验证文件名
      String fileName = n_file.getOriginalFilename();
      String fileNewName = fileName.replaceAll(".xls", "");
      String eL = "[a-zA-Z]+[0-9]{4}-[0-9]{2}-[0-9]{2}";
      Pattern p = Pattern.compile(eL);
      Matcher m = p.matcher(fileNewName);
      boolean dateFlag = m.matches();
      if (!dateFlag) {
        System.out.println("格式错误");
        uploadFormBackVo.setFormName(n_file.getOriginalFilename());
        uploadFormBackVo.setUploadTime(new Date());
        uploadFormBackVo.setIfsuccess("上传失败,Excel文件名不符合规格!!!");
        supplyDataReportService.insert(uploadFormBackVo); 

        json.setSuccess(false);
        json.setMsg("Excel,NameError!!!");
        String jsonStr = mapper.writeValueAsString(json);
        return jsonStr;
      }
      //上传文件
      UploadUtil.SaveFileFromInputStream(n_file.getInputStream(), "D:/补数据报表文件", n_file.getOriginalFilename());
      InputStream is2 = new FileInputStream("D:/补数据报表文件/"+n_file.getOriginalFilename()); 

      //读取文件进行内容验证
      ExcelReader excelReader = new ExcelReader(); 

      Map<Integer, SupplyDataReportBackVo> supplyDataReportBackVos = new HashMap<Integer, SupplyDataReportBackVo>(); 

      String jsonStr = excelReader.readExcelContent(is2,supplyDataReportBackVos,json,n_file);
      //判断 readExcelContent()解析Excel文件 是否符合规范 如果符合 修改相应数据
      if(json.isSuccess()==true){
         //遍历map 用value --》SupplyDataReportBackVo 调用  updateById方法
        for(SupplyDataReportBackVo supplyDataReportBackVo : supplyDataReportBackVos.values()){
          supplyDataReportService.updateById(supplyDataReportBackVo);
        } 

        System.out.println("获得Excel表格的内容:");
        for (int i = 1; i <= supplyDataReportBackVos.size(); i++) { 

          System.out.println(supplyDataReportBackVos.get(i));
        }
        //保存上传记录
        uploadFormBackVo.setFormName(n_file.getOriginalFilename());
        uploadFormBackVo.setUploadTime(new Date());
        uploadFormBackVo.setIfsuccess("上传成功");
        supplyDataReportService.insert(uploadFormBackVo);
        return jsonStr;
      }
      // 解析Excel 文件 中  有空值 保存这次上传的记录且删除已上传的Excel文件, 删除已上传的Excel文件已在 readExcelContent()中处理
      uploadFormBackVo.setFormName(n_file.getOriginalFilename());
      uploadFormBackVo.setUploadTime(new Date());
      uploadFormBackVo.setIfsuccess("上传失败,Excel中有空值!!!");
      supplyDataReportService.insert(uploadFormBackVo);
      return jsonStr;
    } catch (IOException e){
      System.out.println(e.getMessage());
    }
  }else{
    //ajax返回的数据
    json.setSuccess(false);
    json.setMsg("Upload File Null!!!!!");
    String jsonStr = mapper.writeValueAsString(json);
    return jsonStr;
  }
  System.out.println("ajax请求成功");
  return ""; 

/    json.setMsg("upload,success!!!"); 

}

这个方法注意几个地方就行,其他的都是楼主本人自身的业务逻辑,第一@RequestMapping中请求的方式为POST,第二传入的参数有个MultipartFile  n_file,这个n_file要跟jsp中的<input>标签中name属性对应。第三要注意返回值Sting上的一个注解@ResponseBody,剩下两个需要注意的地方就是AjaxJson,ObjectMapper。

AjaxJson是自己封装的一个model类,用来处理ajax的,至于ObjectMapper是用来转换类型的具体的自己百度或者脑补吧,楼主也紧紧限于会用。下面贴上AjaxJson:

package com.zhongxin.web.ops.adrule.model; 

import java.util.Map; 

public class AjaxJson { 

  private boolean success = true; 

  private String msg = "ok"; 

  private Object obj = null; 

  private Map<String, Object> attributes; 

  public boolean isSuccess() {
    return success;
  }
  public void setSuccess(boolean success) {
    this.success = success;
  }
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public Object getObj() {
    return obj;
  }
  public void setObj(Object obj) {
    this.obj = obj;
  }
  public Map<String, Object> getAttributes() {
    return attributes;
  }
  public void setAttributes(Map<String, Object> attributes) {
    this.attributes = attributes;
  } 

}

这就是一个简单的ajaxFileUpload 使用流程,欢迎探讨!也希望大家多多支持我们。

(0)

相关推荐

  • jQuery插件ajaxFileUpload异步上传文件

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http://xiazai.jb51.net/201610/yuanma/ajaxfileupload(jb51.net).rar AjaxFileUpload.js并不是一个很出名的插件,只是别人写好的放出来供大家用,原理都是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 当初做了个异步上传的功能

  • jQuery插件ajaxFileUpload实现异步上传文件效果

    ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数说明: 1.url   上传处理程序地址. 2,fileElementId   需要上传的文件域的ID,即<input type="file">的ID. 3,secureuri 是否启用安全提交,默认为false. 4,dataType 服务器返回的数据类型.可以为xml,scri

  • JQuery插件ajaxfileupload.js异步上传文件实例

    在服务器端做文件上传的过程中,如果使用web服务器短端的上传控件去上传文件的话,会导致页面刷新一次,这样对用户的体验就不是很友好了.ajaxfileupload.js是一款jQuery的异步上传文件插件,使用简单且容易上手. 前置条件:ajaxfileupload.js文件,百度下载一个就行. JS引用: 复制代码 代码如下: <script src="/Content/JQueryJS/jquery-2.1.1.js"></script> <script

  • PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例

    平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现ajaxFileUpload这个插件挺不错,所以就用这个插件来做异步上传文件的效果.网上也有很多对ajaxFileUpload插件的使用的文章,不过我发现没有PHP版,所以这次服务器那边的处理就使用PHP语言来处理. 一.详解ajaxFileUpload插件的语法参数 原理:ajaxfileupload是通过监听iframe的onload方

  • jQuery异步上传文件插件ajaxFileUpload详细介绍

    一.ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数说明: 1.url   上传处理程序地址. 2,fileElementId   需要上传的文件域的ID,即<input type="file">的ID. 3,secureuri 是否启用安全提交,默认为false. 4,dataType 服务器返回的数据类型.可以为xml,sc

  • Ajax表单异步上传文件实例代码(包括文件域)

    1.起因 做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当于把表单通过ajax异步发送出去,得到返回结果),然后得到返回值判断是否成功. 2.尝试 先是尝试了一下 "jQuery Form Plugin" ,这玩意就是的巨大的坑,实现他和jquery1.9.2兼容性就不是太好,好不容易把$.browser的问题解决了,发现用他上传文件得不到返回值. $("#view").submit( $("#view").ajaxSu

  • Ajax异步上传文件实例代码分享

    非常不多说,直接给大家上干货,写的不好还请见谅. 具体代码如下所示: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <script src="~/Scripts/jquery-1.8.2.min.js"></script> <title>Ind

  • Ajax异步文件上传与NodeJS express服务端处理

    为了避免在实现简单的异步文件上传功能时候引入一个第三方库文件的尴尬情形(库文件可能造成多余的开销,拉低应用加载速度,尤其是在引入库文件之后仅使用其中一两个功能的情况下,性价比极低),最近了解了一下文件异步上传的实现原理,顺带看了看进度条.图片预览等功能的实现,做一点简单的整理. 文件上传 HTML结构如下,一个file input和一个button.当点击"上传"按钮的时候,将file input选中的文件上传到服务器. <input type="file"

  • 解析ajaxFileUpload 异步上传文件简单使用

    这里就简单介绍下ajaxFileUpload,jQuery插件AjaxFileUpload可以实现ajax文件上传.我们的项目采用的是jsp跟js分离的架构,所以代码如下. 首先是jsp部分: <!-- <form method="post"> --> <input type="file" name="n_file" id="fileToUpload" value="上传表格"

  • jquery ajaxfileupload异步上传插件使用详解

    由于项目需求在上传头像是需要使用异步上传文件,在上传的过程中需要对文件进行校验:规则如下:宽度和高 度大于200,宽高比要小于2,大小小于2M. 我这里使用的是AjaxFileUploader这个组件,服务器使用Struts处理文件. 实例: <form action="" id="imageForm" enctype="multipart/form-data" method="POST"> <input t

  • AjaxFileUpload.js实现异步上传文件功能

    做软工作业时,需要实现无刷新异步上传图片到服务器,于是想利用Ajax: 得到file的val,再post过去- 等真正实现的时候才发现,根本行不通. 于是翻来翻去找到一个封装好的js插件,可以实现异步上传文件. AjaxFileUpload 这个插件的原理是创建隐藏的表单和iframe,然后用JS去提交,获得返回值. 语法 $.ajaxFileUpload([options]) 参数说明 url 上传处理程序地址. fileElementId 需要上传的文件域的ID,即的ID. secureur

  • JavaScript中三种异步上传文件方式

    异步上传文件是为了更好的用户体验,是每个前端必须掌握的技能.这里我提出三点有关异步文件上传的方式. 使用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpRequest2来实现异步上传. 第一种使用浏览器插件上传,需要一定的底层编码功底,在这里我就不讲了,以免误人子弟,提出这点大家可以自行百度. 第二种使用隐藏的iframe模拟异步上传.为什么在这里说的是模拟呢?因为我们其实是将返回结果放在了一个隐藏的iframe中,所以才没有使

  • 简述Java异步上传文件的三种方式

    本文为大家分享了三种Java异步上传文件方式,供大家参考,具体内容如下 用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpRequest2来实现异步上传. 第一种使用浏览器插件上传,需要一定的底层编码功底,在这里我就不讲了,以免误人子弟,提出这点大家可以自行百度. 第二种使用隐藏的iframe模拟异步上传.为什么在这里说的是模拟呢?因为我们其实是将返回结果放在了一个隐藏的iframe中,所以才没有使当前页面跳转,感觉就像是异步操

随机推荐