前端点击上传,将文件通过request传入后端,后端解析request,拿到request中的文件。
package fv.Utils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.List;
import java.util.Map;
/**
* Created by infodba on 2018/3/1.
*/
public class LoadUpExcelUtil {
public FileItem loadUpExcel(HttpServletRequest req) throws UnsupportedEncodingException {
FileItem file = null;
Map<String,Object> map = new HashedMap();
Map<String, Object> sheetMap = null;
req.setCharacterEncoding("UTf-8");
String t = Thread.currentThread().getContextClassLoader().getResource("").getPath();
int num = t.indexOf(".metadata");
String basepath = t;//t.substring(1, num).replace('/', '\\') + req.getContextPath().replace("/", "") + "\\WebContent\\WEB-INF";
//System.out.println(basepath);
//获取的up目录的路径
String path = basepath; //+ "\\upload";
//临时文件目录
String tmpPath = basepath;
//检查我们是否有文件上传请求
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
//1,声明DiskFileItemFactory工厂类,用于在指定磁盘上设置一个临时目录
DiskFileItemFactory disk = new DiskFileItemFactory(1024 * 10, new File(tmpPath));
//2,声明ServletFileUpload,接收上边的临时文件。也可以默认值
ServletFileUpload up = new ServletFileUpload(disk);
//3,解析request
try {
List<FileItem> list = up.parseRequest(req);
//如果就一个文件,
file = list.get(0);
//获取文件名:
String fileName = file.getName();
//获取文件的类型:
// String fileType = file.getContentType();
//获取文件的字节码:
InputStream in = file.getInputStream();
//文件大小
int size = file.getInputStream().available();
//声明输出字节流
OutputStream out = new FileOutputStream(path+"/"+fileName);
//文件copy
byte[] b = new byte[1024];
int len = 0;
while((len=in.read(b))!=-1){
out.write(b, 0, len);
}
out.flush();
out.close();
//删除上传生成的临时文件
//file.delete();
//显示数据
// resp.setContentType("text/html;charset=UTF-8");
// PrintWriter pw = resp.getWriter();
// pw.println("文件名:"+fileName);
// pw.println("文件类型:"+fileType);
// pw.println("<br/>文件大小(byte):"+size);
// List<PlanDetail> details = jiexiExcel(in, file);
// map.put("details",details);
// map.put("fileName",fileName);
} catch (FileUploadException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
}
拿到fileitem后,可以根据自己的需求,将它写入流中。
InputStream is = null;
try {
is = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
然后可以根据业务场景,保存到本地某个路径,重命名等等...