1 文件上传
页面设置type="file" <input type="file" id="fileName" name="fileName"> 来控制上传文件。
2文件处理
controller 通过CommonsMultipartFile类来接收文件,文件在网络中以流的形式存在。
以csv文件为列,通过CommonsMultipartFile.getInputStream() 来获取 InputStream,
//把输入流转换成字节数组
byte[] byteArray = IOUtils.toByteArray(InputStream);
encodingIs = new ByteArrayInputStream(byteArray);
//获取输入流编码
String encoding = FileUtil.getCharset(encodingIs);
biUpload = new ByteArrayInputStream(byteArray);
//通过LineIterator 来一行一行的读文件
LineIterator it = IOUtils.lineIterator(biUpload, encoding);
while (it.hasNext()) {
//获取一行的string
String ss=it.nextLine();
//转成String数组
String[] values = str.split(",");
//这里可以进行数据的处理了,也可以进行异步处理,发起线程,需要多线程处理 可以使用线程池
ansy(values );
}
private void ansy(values ){
new Thread(new Runnable() {
@Override
public void run() {
//数据处理
}
},"线程名称").start();
}
3文件下载
filename = URLEncoder.encode(filename, "UTF-8");
//设置客户端的响应内容
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
//设置HTTP消息头
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
InputStream is = null;
OutputStream out = null;
//找到文件 获取输入流 copy给输出流
IOUtils.copy(input, out);
response.setStatus(HttpServletResponse.SC_OK);
response.flushBuffer();