文件上传
来源:互联网 发布:金山毒霸手机数据恢复 编辑:程序博客网 时间:2024/06/03 20:38
文件上传需要注意:
- 提交方式:post
- 表单中有文件上传的表单项:
- 指定表单类型:
默认类型:enctype="application/x-www-form-urlencoded"
文件上传类型:multipart/form-data
可以使用开源的文件上传组件-Apache提供的文件上传组件-FileUpload组件!
FileUpload组件:
1. 下载源码 2. 项目中引入jar文件 commons-fileupload-1.2.1.jar 【文件上传组件核心jar包】 commons-io-1.4.jar 【封装了对文件处理的相关工具类】
文件上传组件API
|--FileIteamFactory 文件上传工厂类(把每个请求表单封装为一个个FileIteam对象) fac.setRepository( repository ) 设置删除临时目录 |--ServletFileUpload 文件上传核心类:可以获取所有的FileIteam对象 List parseRequest( response ); 获取所有文件上传项 Boolean isMultipartContent( request ) 判断表单类型,文件上传表单,返回true upload.setFileSizeMax( fileSizeMax ); 设置单个文件的最大值 upload.setSizeMax( sizeMax ); 设置总文件的大小 upload.setHeaderEncoding("utf-8"); 设置上传文件名的编码 相当于 request.setCharacterEncoding(...); |--FileIteam 封装了普通表单项的值以及文件上传表单的值 item.getFildName() 获取上传表单名称 item.getString() 获取上传数据 item.getString( "utf-8" ) 获取上传数据,处理中文 item.getContentType() 获取上传文件类型【文件项】 item.getInputStream() 获取文件流【文件项】 item.getName() 获取文件名【文件项】 item.write(file) 写文件 item.delete( ) 删除临时文件
文件上传处理类
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、创建文件上传工厂类 FileItemFactory fac = new DiskFileItemFactory(); // 2、创建文件上传核心类对象 ServletFileUpload upload = new ServletFileUpload(fac); // 设置 // 设置单个文件大小 upload.setFileSizeMax(30*1024*1024); // 设置总文件大小 upload.setSizeMax(50*1024*1024); // 3、判断当前表单是否为文件时上传表单 if(upload.isMultipartContent(request)){ try{ // 3、把请求数据转换为FileItem对象的集合 List<FileItem> list = upload.parseRequest(request); // 遍历得到每一个上传项 for(FileItem item:list){ // 判断是普通表单还是文件上传表单 if(item.isFormField()){ // 普通表单 String fieldName = item.getFieldName(); // 文本框名称 String contentType = item.getContentType(); // 文件类型 String str = item.getString(); // 文本框中的值 }else{ // 文件上传表单 String fieldName = item.getFieldName(); // 文本框名称 String contentType = item.getContentType(); // 文件类型 String name = item.getName(); // 文件名 String str = item.getString(); // 文件中的值 InputStream in = item.getInputStream(); // 文件流 System.out.println(fieldName+":"+name); System.out.println(in); // 获取文件上传路径 String path = this.getServletContext().getRealPath("/upload"); File file = new File(path, name); item.write(file); // 删除临时文件 item.delete(); } } }catch(Exception e){ } } }
文件下载
文件下载时:
1、需要把文件从硬盘以流的方式读入;
2、设置相应头为文件下载
response.setHeader("content-disposition", "attachment;fileName=" + fileName)
3、然后获取response输出流response.getOutputStream
,将文件流写入输出流,
注意乱码问题
tomcat默认使用http协议,数据默认传输是使用的是ISO-8859-1编码,上传时文件名存在于post提交的数据中,所以可以使用request.setCharacterEncoding("utf-8")
;来指定编码格式。
下载时
提交下载的文件名是通过get数据提交的,get数据放在url中,URL使用的编码时ISO-8859-1编码,所以拿到文件名时要进行编码转换
fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");
下载时需要设置下载的响应头,下载响应头传输时默认使用的是ISO-8859-1编码
// 设置下载的响应头resp.setHeader("content-disposition", "attachment;fileName=" + fileName);
如果有中文需要转码
// 如果文件名是中文,需要进行url编码// 使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。fileName = URLEncoder.encode(fileName, "UTF-8");
或者使用
fileName = new String(fileName.getBytes("utf-8"),"iso-8859-1");
阅读全文
0 0
- 文件上传---文件上传
- 上传文件
- 文件上传
- 上传文件
- 文件上传
- 文件上传
- 上传文件
- 上传文件
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 上传文件
- 文件上传
- 文件上传
- SSRS 如何设置报表参数的日期为当前日期
- Hadoop2.X架构浅析
- 最长上升子序列
- 【mysql 安装教程】MySQL5.7.18-下载安装教程
- 与人沟通技巧
- 文件上传
- NFS架构下使用realpath_turbo优化php性能
- Android获取外网IP地址
- express中res.json方法
- 字符串的输入--C
- JS中的JSON对象 定义和取值(包括动态创建JSON对象)
- 解决HibernateTemplate无法根据hql批量删除的问题
- 命令行/cmd/command执行oracle的sql文件
- 图的最小生成树问题-公路村村通