上传excel文件到到服务器(导入信息)

技术准备:

1.文件上传

fileuploadtest.jsp

<html>
<head>
    <base href="<%=basePath%>">
    <title>演示文件上传</title>
</head>
<body>
<%--文件上传的表单三个条件:
     1.表单组件标签只能用:<input type="file">
     下面这些是平常常用的组件:
     <input type="text|password|radio|checkbox|hidden|button|submit|reset|file">
                       <select>,<textarea>等
     2.请求方式只能用post
               post:参数写在请求体里面,既能提交文本数据,也可以提交二进制数据;长度理论上没有限制,不能使用缓存
               get:参数写在url上,url在请求头上,只能向后台提交文本数据;对参数长度有限制,可以使用缓存
     3.表单的编码格式只能用:multipart/from-data
           根据HTTP协议的规定,浏览器每次向后台提供参数,都会对参数进行统一编码了、;默认的编码是urlencoded,这种编码格式只能对文本数据进行编码
           浏览器每次向后台提交参数,都先会把参数转换成字符串,然后对这些数据同一进行编码;
     --%>
<form action="workbench/activity/fileUpload.do" method="post" enctype="multipart/form-data">
    <input type="file" name="myFile"><br>
    <input type="text" name="userName"><br>
    <%--上面这两个并不冲突,也就是及上传一个文件也传一个字符串到后台--%>
    <input type="submit" value="提交">
</form>

</body>
</html>

  controller层-》fileUpload()       

       springmvc的配置文件:

<!-- 配置文件上传解析器 id:必须是multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="#{1024*1024*5}"/>
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

      controller:

 /*注意:
    * 这里需要先在springMVC中的配置文件中先配置文件上传解析器
    * 用于从前端放在响应体中的文件解析出来才能放到controller层接收*/
    //测试文件上传controller
    @RequestMapping("/workbench/activity/fileUpload.do")
    @ResponseBody
    public Object fileUpload(String userName, MultipartFile myFile) throws IOException {
          //把文本数据打印在控制台
        System.out.println("userName="+userName);
        //把文件在服务器指定的目录中生成同一个文件
        String originalFilename = myFile.getOriginalFilename();

        File file = new File("D:\\实践项目\\CRM后台系统\\serverDir\\"+originalFilename);
        myFile.transferTo(file);
        //返回信息
        ReturnObject returnObject=new ReturnObject();
        returnObject.setMessage("上传成功");
        returnObject.setCode(Constant.RETURN_OBJECT_CODE_SUCCESS);
        return  returnObject;
    }

2.使用Java解析excel文件:使用apache-poi

//使用apache-poi解析excel文件
public class ParseExcelTest {
    public static void main(String[] args) throws IOException {
        //根据excel文件生成HSSFWorkbook对象,封装了excel文件哎都所有信息
        InputStream is = new FileInputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");
        HSSFWorkbook wb = new HSSFWorkbook(is);
        //根据wb获取HSSFSheet对象,封装了一页的所有信息
        HSSFSheet sheet = wb.getSheetAt(0);//页下标,下标从零开始
        //根据sheet获取HSSFSheet获取行
        HSSFRow row=null;
        HSSFCell cell=null;
        for (int i=0;i<=sheet.getLastRowNum();i++){//sheet.getLastRowNum()最后一行的下标
             row = sheet.getRow(i);//行下标,从零开始
            for (int j=0;j<row.getLastCellNum();j++){//row.getLastCellNum()最后一列下标+1
                //根据row对象获取HSSFCell对象,,封装一列的信息
                cell = row.getCell(j);//列下标,从零开始
                //获取列中的数据
                System.out.print(HSSFUtils.getCellValueForStr(cell)+" ");
            }

            //每一行中所有列都打完,打印一个换行
            System.out.println();
            }

        }


    }

工具类:


/**
 * 关于excel文件操作的工具类
 */
public class HSSFUtils {
    /**
     * 从指定的HSSFCell对象中获取列的值
     * @return
     */
    public static String getCellValueForStr(HSSFCell cell){
        String ret="";
        if(cell.getCellType()==HSSFCell.CELL_TYPE_STRING){
            ret=cell.getStringCellValue();
        }else if(cell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){
            ret=cell.getNumericCellValue()+"";
        }else if(cell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){
            ret=cell.getBooleanCellValue()+"";
        }else if(cell.getCellType()==HSSFCell.CELL_TYPE_FORMULA){
            ret=cell.getCellFormula();
        }else{
            ret="";
        }

        return ret;
    }
}

注:使用Ajax向后台提交文件注意要设置是否要转成字符串和是否要进行encoded编码

并注意1.val()获取的是文件的名称,比对是否是所需文件格式要进行字符串的裁剪

  str.substr(str.lastIndexOf(".")+1)//截取文件的后缀名

2.想要获取文件,需要从document中获得

其中有两种方式:1)document.getElementById()

                           2)$("按钮")[0].files[0]

         

 //给批量导入的导入按钮添加单击事件
            $("#importActivityBtn").click(function (){
                //收集参数
                var activityFileName=$("#activityFile").val();//获取文件名称
                var suffix=activityFileName.substr(activityFileName.lastIndexOf(".")+1).toLocaleLowerCase();//截取字符串拿到后缀
                if (suffix!="xls"){
                    alert("只支持xls文件!");
                    return ;
                }
                var activityFile=$("#activityFile")[0].files[0];//得到文件本身
                //document.getElementById()
                //验证文件大小
                if (activityFile.size>5*1024*1024){
                    alert("文件大小不能超过5MB!");
                    return ;
                }
                //FormData这个是ajax提供的一个接口,相当于Java里面的类
                //这个类可以模拟键值对向后台提供参数。优点就是字符串文本和二进制都可以提交
                var formData=new FormData();
                formData.append("activityFile",activityFile);
                formData.append("userName","testName");
                //发送请求
                $.ajax({
                    url:'workbench/activity/importActivity.do',
                    data:formData,
                    type:'post',
                    contentType:false,//设置Ajax向后台提交参数之前,是否把所有的参数统一按urlencoded编码;
                    processData:false,//默认情况下,会将参数转译成字符串格式。
                    dataType:'json',
                    success:function (data){
                        if (data.code=="1"){
                            alert("成功导入"+data.retData+"条数据!");
                            $("#importActivityModal").modal("hide");
                            queryActivityByConditionForPage(1,$("#demo_pag1").bs_pagination('getOption', 'rowsPerPage'));
                        }else {
                            alert(data.message);
                            $("#importActivityModal").modal("show");
                        }
                    }

                })
            })

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值