文件的上传和下载
来源:互联网 发布:傻瓜进销存软件 编辑:程序博客网 时间:2024/04/30 20:44
文件上传的准备
1:准备表单 请求方式:post enctype设置为:multipart/form-data 将enctype设置为multipart/form-data之后就不能在使用req.getParameter() 2:导入jar包 commons-fileupload-1.2.2.jar commons-io-1.4.jar
* 创建表单
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional// EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>用户信息录入</h1> <span style="color: red">${errorMsg}</span> <form action="/upload" method="post" enctype="multipart/form-data"> 姓名:<input name="name" /><br/> 年龄:<input name="age" /><br/> 头像:<input type="file" name="headImg" /><br/> <input type="submit" value="上传"/> </form> </body> </html>
FileUploadServlet
public class FileUploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try { if (!ServletFileUpload.isMultipartContent(req)) { return; //判断提交的表单是否合法 } ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory()); //创建文件解析器包含改工厂类对象 List<FileItem> list = upload.parseRequest(req);//解析请求 for (FileItem item : list) { //迭代控件集合 if (!item.isFormField()) { //不是普通控件时 UUID uuid = UUID.randomUUID(); //获取文件名 //获取文件夹的绝对路径 String path = req.getServletContext().getRealPath("upload"); String extension = FilenameUtils.getExtension(item .getName()); //获取文件的后缀名 item.write(new File(path + "\\" + uuid + "." + extension)); } //调用write方法上传文件 } } catch (Exception e) { e.printStackTrace(); } }}
实现步骤
1:判断表单 ServletFileUpload.isMultipartContent(req)2:创建文件解析器 ServletFileIpload upload=new ServletFileUpload(new DiskFileItemFactory())3:解析请求 List<FileItem> list=upload.parseRequest()4:迭代集合 for(FileItem item:list)5:判断不是普通表单 !item.isFormFiled()6:获取文件名,路径,文件后缀名 UUID uuid=UUID.randomUUUID(); String path=req.getSetvletContext().getRealPath("文件夹") String extension=FilenameUtils.getExtension(item.getName()) 7:写入文件 item.write(new File(path+"\\"+uuid+"."+extension))
文件类型判断
1:自定义异常类,自定义集合封装文件类型2:判断为不支持类型时抛出异常信息3:采用对应异常类型捕获继续抛出4:将文件上传封装为工具类5:捕获异常,将异常信息放到请求作用域中6:使用请求转发返回初始页面,并使用EL表达式获取作用域中的值
文件下载
DownloadServlet
//获取参数 String filename = req.getParameter("filename"); //获取目录String dir = getServletContext().getRealPath("WEB-INF/download"); //获取输出流ServletOutputStream out = resp.getOutputStream(); //处理文件名称 中文乱码resp.setHeader("Content-Disposition", "attachment; filename="+new String(filename.getBytes("UTF-8"),"ISO-8859-1")); //解决在IE6默认打开文件的方法resp.setContentType("applicatoin/x-msdownload"); //创建文件File f = new File(dir,filename); //拷贝文件Files.copy(Paths.get(f.getAbsolutePath()), out);
download.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><a href="/download?filename=xhr.zip">xhr.zip</a><br/><a href="/download?filename=程序员.zip">程序员.zip</a></body></html>
默认为get请求,需要在server.xml文件中设置编码
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
0 0
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- .文件的上传和下载:
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- 文件的上传和下载
- Quartz2d图片裁剪/加水印/截屏
- 当应用程序版本升级时
- vim快捷键整理
- 如果有人问你数据库的原理,叫他看这篇文章(下)
- 手把手教你使用Travis CI自动部署你的Hexo博客到Github上
- 文件的上传和下载
- Java面向对象复习笔记
- Mongodb for mac 的安装与配置
- sublime Text 3安装模板插件
- win32(002) 创建窗口和 子窗口 事件处理
- Day6
- 04Android学习从零单排之ContentProvider
- SPOJ DETER3 (矩阵行列式)
- Header函数和PHP_AUTH_USER做用户验证