一、下载,一般用于数据下载,模板下载。Excel模板文件(以下简称,文件)下载为例,且是Maven项目。
1.首先要明确放在服务器的文件地址,
放在java文件的同级目录,类名.class.getClassLoader.getResource(""),获取文件地址,在开发阶段没问题,但Maven打成war包发布后URL会找不到。
URL输出为,xxx/webapp/WEB-INF/classes/com.xxx.类名。注意是开发阶段没问题。manve打成war包发布,模块是单独的jar包原因吧。
正确做法:
1.1.把模板放置到xxx.web模块的src/main/resources目录template/*.xlsx下;
1.1.1修改pom.xml文件,补充<exclude>标签
<build>
...
<directory>src/main/resources</directory>
<artifactId>maven-war-plugin</artifactId>
<targetPath>WEB-INF/classes</targetPath>
<excludes>
<exclude>template/*</exclude>
</excludes>
</build>
注意,因为不排除*.xlsx文件,打包后的模板文件会损坏。
1.2 获取路径代码
URL fileURL = Thread.currentThread().getContextClassload().getResource("template/*.xlsx");
File file = new File(fileURL.toURI());
//设置response header
//设置response 文件类型(可选)
//设置response contentLength
InputStream input = new FileInputStream(file);
BufferedOutputStream bos = new FileInputStream(response.getOutputStream());
byte[] byteArr = new byte[2048];
while(input.read(byteArr) != -1){
bos.write(byteArr);
}
input.close();bos.close();
二、上传,包含,文件上传和Excel解析
1.页面注意提交表单必须是enctype="multipart/form-data"这个属性。
2.如果想补充参数,注意查看浏览器提交内容,也是附件的形式提交的,后台取值与去附件类似。
//解析附件部分:
//commons-fileupload-1.3.2.jar/org.apache.commons.fileupload.disk
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileupload upload = new ServletFileupload();
List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
//POI解析Excel部分:
for(FileItem item :list){
InputStrem input = item.getInputStream();
Workbook wb = WorkbookFactory.create(input);
Sheet sheet = wb.getSheet("Sheet1");
int rows = sheet.getPhyscalNumerOfRows();
// for,rows-> Row row = sheet.getRow(rowNum);
row.getCell(columnNum);
//注意,row.getCell(columnNum);取出的Cell对象不一定是String类型,需要根据不同的类型判断(或者找个取值的Utils文件处理)。
}
上传,主要还是校验。