问题:本地测试时,通过本地地址上传文件是可行的,但是当把项目部署到服务器上时,通过这种方式上传本地文件是不行的。
解决:需要先把文件上传到服务器,然后再做其他操作(提取数据,数据转换,存档等)
前端代码(表单上传文件,后面会研究ajax上传文件)
<s:form action="member_extractMembers" method="post" enctype="multipart/form-data">
<span>选择Excel文件</span>
<s:file name="upload_excel" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"></s:file>
<br>
<s:submit value="导入"></s:submit>
</s:form>
后端代码(excel文件解析):
/**
* 提取Excel中的内容
* */
public static List<Member> extract(File file_name){
//List<Member> members = new ArrayList<>();
List<Member> members = new ArrayList<>();
try {
InputStream is = new FileInputStream(file_name);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
//只读取第一个sheet进行处理
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
//处理当前sheet,循环读取每一行
for(int row_num = 1; row_num < (sheet.getLastRowNum()+1);row_num++){
//System.out.println(sheet.getLastRowNum());
XSSFRow xss_row = sheet.getRow(row_num);
Member member = new Member();
member.setName(getStringVal(xss_row.getCell(0)));
member.setPhone(getStringVal(xss_row.getCell(1)));
member.setCard_name(getStringVal(xss_row.getCell(2)));
member.setLoose_change(getStringVal(xss_row.getCell(3)));
members.add(member);
}
//}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return members;
}
其他代码:
/**
* 提取文件中的会员
* */
public String extractMembers(){
List<Member> members = MemberUtil.extract(upload_excel);
request.setAttribute("add_members", members);
request.setAttribute("title", "批量添加会员");
request.setAttribute("navPath", "foreground/nav2/nav.jsp");
request.setAttribute("contempPath", "foreground/shop/member/addMany.jsp");
return SUCCESS;
}
注:upload_excel 与前端input的name一致
如有错误,还请多指教。