JavaWeb同步学习笔记之九十五、JavaWeb_文件上传案例_复习
2019-03-22 08:55
323 查看
JavaWeb_文件上传案例_复习
文件上传案例_复习
- 1.进行文件上传时,表单需要做的准备:
1)请求方式为 POST:< form action=“uploadServlet” method=“post” … >
2)使用 file 的表单域:< input type=“file” name=“file”/>
3)使用 multipart/form-data 的请求编码方式:< form action=“uploadServlet” method=“post” enctype=“multipart/form-data”>
<form action="uploadServlet" method="post" enctype="multipart/form-data"> File: <input type="file" name="file" /> <br><br> <input type="submit" value="Submit" /> </form>
.
4)关于 enctype:
> application/x-www-form-urlencoded:表单 enctype 属性的默认值。这种编码方案使用有限的字符集,当使用了非字母和数字时,必须用”%HH”代替(H 代表十六进制数字)。对于大容量的二进制数据或包含非 ASCII 字符的文本来说,这种编码不能满足要求。
> multipart/form-data:form 设定了enctype=“multipart/form-data”属性后,表示表单以二进制传输数据。
- 2.服务端:
1)不能再使用 request.getParameter() 等方式获取请求信息。获取不到,因为请求的编码方式已经改为 multipart/form-data,以二进制的方式来提交请求信息。
2)可以使用输入流的方式来获取,但不建议这样做。
3)具体使用 commons-fileupload 组件来完成文件的上传操作。 - 3.具体使用 commons-fileupload 组件来完成文件的上传操作。
1)环境搭建:加入 commons-fileupload-1.3.3.jar 和 commons-io-2.6.jar
2)基本思想:
> commons-fileupload 可以解析请求, 得到一个 FileItem 对象组成的 List。
> commons-fileupload 把所有的请求信息都解析为 FileItem 对象,无论是一个一般的文本域还是一个文件域。
> 可以调用 FileItem 的 isFormField() 方法来判断是一个 表单域 或不是表单域(则是一个文件域)。
> 再来进一步获取信息 - 4.FileUploadServlet.java
package com.xs.fileupload.app.servlet; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.xs.fileupload.app.beans.FileUploadBean; import com.xs.fileupload.app.utils.FileUploadAppProperties; /** * Servlet implementation class FileUploadServlet */ @WebServlet("/fileUploadServlet") public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FileUploadServlet() { super(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletFileUpload upload = getServletFileUpload(); try { //把需要上传的 FileItem 都放入到该 Map 中 //键:文件的待存放的路径,值:对应的 FileItem 对象 Map<String, FileItem> uploadFiles = new HashMap<String, FileItem>(); //解析请求,得到 FileItem 的集合。 List<FileItem> items = upload.parseRequest(request); //1.构建 FileUpdateBean 的集合,同时填充 uploadFiles List<FileUploadBean> beans = buildFileUploadBeans(items, uploadFiles); //2.校验扩展名: vaidateExtName(beans); //3.校验文件的大小:在解析式已经校验了,我们只需要异常得到结果。 //4.进行文件的上传操作 upload(uploadFiles); //5.把上传的信息保存到数据库中 saveBeans(beans); } catch (Exception e) { e.printStackTrace(); } } /** * @Title: buildFileUploadBeans * @Description: TODO * @param items * @param uploadFiles * @return * @return List<FileUploadBean> */ private List<FileUploadBean> buildFileUploadBeans(List<FileItem> items, Map<String, FileItem> uploadFiles) { return null; } /** * @Title: saveBeans * @Description: TODO * @param beans * @return void */ private void saveBeans(List<FileUploadBean> beans) { } /** * @Title: upload * @Description: TODO * @param uploadFiles * @return void */ private void upload(Map<String, FileItem> uploadFiles) { } /** * @Title: vaidateExtName * @Description: TODO * @param beans * @return void */ private void vaidateExtName(List<FileUploadBean> beans) { } /** * @Title: getServletFileUpload * @Description: TODO * @return * @return ServletFileUpload */ private ServletFileUpload getServletFileUpload() { String exts = FileUploadAppProperties.getInstance().getProperty("exts"); String fileMaxSize = FileUploadAppProperties.getInstance().getProperty("file.max.size"); String totalFileMax = FileUploadAppProperties.getInstance().getProperty("total.file.max.size"); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 500); File tempDirectory = new File("f:\\tempDirectory"); factory.setRepository(tempDirectory); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(Integer.parseInt(fileMaxSize)); upload.setSizeMax(Integer.parseInt(totalFileMax)); return upload; } }
- 5.问题1:如果是一个多选,如何获取对应的字符串数组。每一个都对应一个 FileItem 对象。
- 6.问题2:临时文件夹如何清空的问题:手工删除的方式。
相关文章推荐
- JavaWeb同步学习笔记之九十七、JavaWeb_文件上传案例_文件下载
- JavaWeb同步学习笔记之九十六、JavaWeb_文件上传案例_校验及小结
- [原创]java WEB学习笔记50:文件上传案例
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 【JAVAWEB学习笔记】29_文件的上传------commons-fileupload
- Javaweb学习笔记10—文件上传与下载
- android 入门学习笔记 上传大文件
- JSP Servlet学习笔记——使用fileupload上传文件
- struts2学习笔记--上传单个和批量文件示例
- [Struts2]struts2 实现文件上传【学习笔记】
- PHP 文件上传表单 ~~学习笔记
- hadoop学习笔记之hdfs的文件上传下载
- php学习笔记(十)文件的上传与下载
- mybatis学习笔记--配置文件+注解完整案例
- 文件上传与下载学习笔记(1)---文件上传原理及配置
- 文件上传与下载学习笔记(3)---面向对象方法实现文件上传
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
- Struts2.0学习笔记---上传文件和多文件上传
- 【笔记】Spring MVC学习指南(十一)上传文件
- 安装、进程-云计算学习笔记---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载-by小雨