1 文件上传
1.1前端页面
<form action="/xx/upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
头像:<input type="file" name="headImg"><br/>
<input type="submit" value="提交">
</form>
1.2 获取上传流
ServletInputStream input = req.getInputStream();
int read = input.read();
System.out.println(read);
1.3 导入Jar包
commons-fileupload-1.2.2.jar (注意,是jar包)
commons-io-1.4.jar
1.4 具体操作代码
String[] arr={"jpg","png","bmp","gif"};
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*ServletInputStream input = req.getInputStream();
int read = input.read();
System.out.println(read);*/
//检查我们是否有文件上传请求
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
//System.out.println(isMultipart);
//为基于磁盘的文件项创建工厂
FileItemFactory factory = new DiskFileItemFactory();
//创建一个新的文件上传处理程序
ServletFileUpload upload = new ServletFileUpload(factory);
//解析请求
try {
List<FileItem > list = upload.parseRequest(req);
for (FileItem fileItem : list) {
if(fileItem.isFormField())
System.out.println(fileItem.getFieldName()+":"+fileItem.getString("UTF-8"));
else{
//获取web项目根路径
//String realPath = req.getServletContext().getRealPath("image/"+fileItem.getName());
//System.out.println(realPath);
String uuid = UUID.randomUUID().toString();
//获取文件名后缀
String extension = FilenameUtils.getExtension(fileItem.getName());
String realPath = null;
//判断文件名后缀是否匹配
if(Arrays.asList(arr).contains(extension))
realPath = req.getServletContext().getRealPath("image/"+uuid+"."+extension);
File file = new File(realPath);
if(!file.exists())
file.createNewFile();
fileItem.write(file);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
2 文件下载
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//告诉浏览器要下载资源了
resp.setContentType("application/x-msdownload");
String filename = req.getParameter("filename");
//获取文件路径
String realPath = req.getServletContext().getRealPath("image/"+filename);
//获取请求头
String header = req.getHeader("User-Agent");
String encode = null;
if(header.contains("Firefox")){
//将文件名设置编码
encode = new String(filename.getBytes("UTF-8"),"ISO-8859-1");
}else{
encode = URLEncoder.encode(filename,"UTF-8");
}
//设置下载文件的名字
resp.setHeader("Content-Disposition", "attachment; filename="+encode);
//拷贝文件到响应
Files.copy(Paths.get(realPath), resp.getOutputStream());
}