html:

<li>
         <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传:</span>
         <span class="input">
   <input type="file" id="upfile" name="upfile" placeholder=""/>
</span>
         <button onclick="importExp();">导入</button>
         <span>格式:.xls</span>
     </li>
js:
//导入文件 function importExp() {
    var formData = new FormData();
    var name = $("#upfile").val();
    formData.append("file",$("#upfile")[0].files[0]);
    formData.append("name",name);
    $.ajax({
        url : '#springUrl('')/summary/importExp',type : 'POST',async : false,data : formData,// 告诉jQuery不要去处理发送的数据  processData : false,// 告诉jQuery不要去设置Content-Type请求头  contentType : false,beforeSend:function(){
            console.log("正在进行,请稍候");
        },success : function(responseStr) {
            if(responseStr=="01"){
                alert("导入成功");
            }else{
                alert("导入失败");
            }
        }
    });
}

controller:

@RequestMapping("/importExp")
@ResponseBody
public String importExp(@RequestParam("file") multipartfile file,HttpServletRequest request){
// 判断文件是否为空
String flag = "02";//上传标志
if (!file.isEmpty()) {
try {
String originalFilename = file.getoriginalFilename();//原文件名字
InputStream is = file.getInputStream();//获取输入流
flag = summaryExpServiceImpl.writeExelData(is);
// 转存文件
//file.transferTo(new File(filePath));
} catch (Exception e) {
flag="03";//上传出错
e.printstacktrace();
}
}
return flag;
}



service:

/**  * 写入  * @param is  */ public String writeExelData(InputStream is){
    List<List<String>> list = readExcelContent(is);
    for (int i=0,j=list.size();i<j;i++){
        List<String> row = list.get(i);
        ExpInfoSummary expInfoSummary = new ExpInfoSummary();
        expInfoSummary.setorgName(row.get(0));
        expInfoSummary.setSiteName(row.get(1));
        expInfoSummary.setProductCode(row.get(2));
        expInfoSummary.setProductName(row.get(3));
        expInfoSummary.setProductNum(row.get(4));
        expInfoSummary.setProductPrice(Double.valueOf(row.get(5)));
        expInfoSummary.setProductState(row.get(6));
        pool.getsqlSession("psEpfsqlSession").selectList("com.jd.ps.data.epf.mapper.expInfoSummary.insertExp",expInfoSummary);
    }
    return "01";
}

/**  * 读取Excel数据内容  * @param is  * @return Map 包含单元格数据内容的Map对象  */ public List<List<String>> readExcelContent(InputStream is) {
    List<List<String>> content = new ArrayList<List<String>>();
    POIFSFileSystem fs;
    hssfWorkbook wb;
    hssfSheet sheet;
    hssfRow row;
    String str = "";
    try {
        fs = new POIFSFileSystem(is);
        wb = new hssfWorkbook(fs);
        sheet = wb.getSheetAt(0);
        // 得到总行数  int rowNum = sheet.getLastRowNum();
        row = sheet.getRow(0);
        int colNum = row.getPhysicalNumberOfCells();
        // 正文内容应该从第二行开始,第一行为表头的标题  for (int i = 1; i <= rowNum; i++) {
            row = sheet.getRow(i);
            int j = 0;
            List<String> list = new ArrayList<String>();
            while (j < colNum) {
                // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据  // 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean  // str += getStringCellValue(row.getCell((short) j)).trim() +  // "-";  str = getCellFormatValue(row.getCell((short) j)).trim();
                list.add(str);
                j++;
            }
            content.add(list);
            str = "";
        }
    } catch (IOException e) {
        e.printstacktrace();
    }
    return content;
}

/**  * 根据hssfCell类型设置数据  * @param cell  * @return  */ private String getCellFormatValue(hssfCell cell) {
    String cellvalue = "";
    if (cell != null) {
        // 判断当前Cell的Type  switch (cell.getCellType()) {
            // 如果当前Cell的Type为NUMERIC  case hssfCell.CELL_TYPE_NUMERIC:
            case hssfCell.CELL_TYPE_FORMULA: {
                // 判断当前的cell是否为Date  if (hssfDateUtil.isCellDateFormatted(cell)) {
                    // 如果是Date类型则,转化为Data格式   //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00  //cellvalue = cell.getDateCellValue().toLocaleString();   //方法2:这样子的data格式是不带带时分秒的:2011-10-12  Date date = cell.getDateCellValue();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    cellvalue = sdf.format(date);

                }
                // 如果是纯数字  else {
                    // 取得当前Cell的数值  cellvalue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            }
            // 如果当前Cell的Type为STRIN  case hssfCell.CELL_TYPE_STRING:
                // 取得当前的Cell字符串  cellvalue = cell.getRichStringCellValue().getString();
                break;
            // 默认的Cell值  default:
                cellvalue = " ";
        }
    } else {
        cellvalue = "";
    }
    return cellvalue;

}

通过ajax上传excel的更多相关文章

  1. jQuery利用FormData上传文件实现批量上传

    这篇文章主要为大家详细介绍了jQuery利用FormData上传文件实现批量上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例

    这篇文章主要介绍了thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json操作,结合实例形式分析了thinkphp5 + ajax 使用formdata提交数据、文件上传与后台返回json遇到的相关问题即解决方法,需要的朋友可以参考下

  3. 使用FormData进行Ajax请求上传文件的实例代码

    这篇文章主要介绍了使用FormData进行Ajax请求上传文件的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  4. jQuery Ajax使用FormData上传文件和其他数据后端web.py获取

    这篇文章主要介绍了jQuery Ajax使用FormData上传文件和其他数据后端web.py获取 ,需要的朋友可以参考下

  5. JQuery基于FormData异步提交数据文件

    这篇文章主要介绍了JQuery基于FormData异步提交数据文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  6. vue上传文件formData上传的解决全流程

    这篇文章主要介绍了vue上传文件formData上传的解决全流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. jQuery+formdata实现上传进度特效遇到的问题

    这篇文章主要介绍了jQuery+formdata实现上传进度特效遇到的问题的相关资料,需要的朋友可以参考下

  8. vue上传文件formData入参为空,接口请求500的解决

    这篇文章主要介绍了vue上传文件formData入参为空,接口请求500的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. 通过Ajax使用FormData对象无刷新上传文件方法

    这篇文章主要介绍了通过Ajax使用FormData对象无刷新上传文件方法,具有一定的参考价值,感兴趣的朋友可以了解一下。

  10. 通过Ajax方式上传文件使用FormData进行Ajax请求

    这篇文章主要介绍了通过Ajax方式上传文件使用FormData进行Ajax请求的相关资料,需要的朋友可以参考下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部