导入axios包
前端jsp页面添加选择本地文件
采用表单的上传文件组件,效果如下:
前端jsp页面编写:
<tr>
<td class="tdTitle">
<span class="param">证券代码选择</span></td>
</td>
<td class="tdBody" colspan=3>
<input type="file" id="select" name="select1" onChange="selectExcel()">
</td>
</tr>
类型选择file,采用onChange事件,注意事件名不能与id相同.
否则会报方法is not a function错误..
方法编写如下:
var org_code="";
function selectExcel (){
let formData = new window.FormData();
formData.append('selectExcel',document.querySelector('input[type=file]').files[0]);
let options = { // 设置axios的参数
url: "/tjfx/select/excel.action",//访问地址
data: formData,
method: 'post',
headers: {
'Content-Type': 'multipart/form-data'
}
};
axios(options).then(resp => {
if (resp.data != "") {
org_code = resp.data;
console.log(org_code);
}
});
};
后端接收文件如下:
package zhcx.action;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@Controller
@RequestMapping(value="/select")
public class SelectExcelAction {
@RequestMapping(value="/excel.action",method= RequestMethod.POST )
public @ResponseBody String selectExcel( MultipartFile selectExcel)throws Exception{
System.out.println("begin.....");
String org_codes="";
InputStream inputStream = selectExcel.getInputStream();
//获取excel表
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
//获取excel表中的第一个sheet
HSSFSheet sheet = workbook.getSheetAt(0);
//循环每一行
for(int rowNum= 1;rowNum <= sheet.getLastRowNum();rowNum++) {
HSSFRow hssfRow=sheet.getRow(rowNum);
if(hssfRow== null) {
continue;
}
//只要第一列的数
HSSFCell hssfcell=hssfRow.getCell(0);
//转换为字符串
String s1 = hssfcell.toString();
//123456会变为123456.0,只要整数部分
String s = s1.substring(0, 6);
//表格数据符合6位数字
if(s.matches("^\\d{6}$")){
org_codes = org_codes+","+s;
}
}
//去除最前面的逗号.
String org_code = org_codes.substring(1);
//关流
inputStream.close();
return org_code;
}
}
注意:接受文件类型mutipartFile需要在xml中配置解析器
<!-- 文件解析-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
注意poi的使用,2003和2007的差别,.xls和.xlsx文件转换必能直接给文件后缀,需另存为才有效
注意路径:配置的项目路径和请求路径
读取的excel中的数值为double类型
字符串匹配正则表达式:用.matches方法,注意java的编译差别,"\"要写成"\\"
暂时需求中注意事项就先这么多
补充::写的功能在goolge浏览器和火狐浏览器可以正常访问,在ie浏览器因为浏览器问题不可访问,可以引入
<script type="text/javascript" src="<%=path1%>/zhcx/js/es6-promise.auto.min.js"></script>
es6-prmise.auto.min.js这个js可以将下面这段文字全部复制进一个新建文本文档,改名称为es6-prmise.auto.min.js即可得到这个js,用上面的script引入进可以了,但是注意,ie浏览器的版本为11.低版本会出现问题.