upload
上传必须设置表单提交方式为post因为 涉及到文件提交;并且要设置提交样式
enctype="multipart/form-data" :多部分表单
什么意思?将表单以多段的方式提交;每一个key=value就是一段表单
这种提交方式无法用普通的 request.getParameter 接收
普通方法接收到的是 string类型的图片名
通过工具commons-fileupload解析多部分表单的解析
导入两个jar包创建ServletFileUpload对象
ServletFileUpload的使用
1.解析请求体
//完成多部分表单数据请求体的解析(图片,文件等) DiskFileItemFactory factory = new DiskFileItemFactory(); //factory配置上传设置的对象 ServletFileUpload servletFileUpload=new ServletFileUpload(factory)
2.把读取的信息存入到集合
List<FileItem> fileItems = null; try { fileItems=servletFileUpload.parseRequest(req);//用parseRequest对请求体进行解析 返回一个集合;存入每段表单
3.分别处理普通数据和文件数据
for (FileItem fileItem : fileItems) { if (fileItem.isFormField())//是否是普通的表单数据 { String fieldName = fileItem.getFieldName(); String value = fileItem.getString("utf-8"); System.out.println(fieldName +"--->" +value); } else {
//是否是文件;文件处理 //通过代码创建存储上传文件的目录headerimgs //String dirPath=this.getServletContext().getRealPath("/headimg"); String dirPath=this.getServletContext().getContextPath(); File dir=new File(dirPath+"/headimg");//部署到了out下 if(!dir.exists()){ dir.mkdir();//只需要创建一次x } String fileName = fileItem.getName();//文件名 System.out.println(fileName); String fname = UUID.randomUUID().toString()+fileName.substring(fileName.indexOf(".")); String path = this.getServletContext().getRealPath("/headimg/"+fname); System.out.println(path); File file = new File(path); fileItem.write(file);
将传入的文件存到out目录下的headimg
文件下载
DownloadServlet 通过工具类
commons.io.IOUtils
将服务器的文件发送到浏览器
1.获取前端传过来的name
2.String mimeType = this.getServletContext().getMimeType("/download/"+filename);
获取到当前路径下的。
//getMimeType获取文件类型 image/jpeg 路径:web/download/filename
response.setHeader("Content-type",mimeType);//设置响应头信息
response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8")); //处理方式:attachment: 附件。 "utf-8"设置文件编码