当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 解析ajaxFileUpload 异步上传文件简单使用

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

2019年04月01日  | 移动技术网IT编程  | 我要评论
这里就简单介绍下ajaxfileupload,jquery插件ajaxfileupload可以实现ajax文件上传。我们的项目采用的是jsp跟js分离的架构,所以代码如下。

这里就简单介绍下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 使用流程,欢迎探讨!也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网