搜索
首页
笔记
案例
关于
课程列表
JavaWeb
Tomcat安装、部署等操作
Servlet
JSP
EL表达式与JSTL标签库
文件上传与下载
cookie与session
Filter过滤器
Listener监听器
ThreadLocal
Gson
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
EL表达式与JSTL标签库
cookie与session
文件上传与下载
## 上传 1、要有一个 form 标签,method=post 请求 2、form 标签的 encType 属性值必须为 multipart/form-data 值 3、在 form 标签中使用 input type=file 添加上传的文件 4、编写服务器代码(Servlet 程序)接收,处理上传的数据。 enctype=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器 ```
``` ### 文件上传,HTTP 协议的说明。 ![](https://www.1024phper.com/wp-content/uploads/2021/03/Snipaste_2021-03-25_11-09-38.jpg) ### commons-fileupload.jar 常用 API 介绍说明 commons-fileupload.jar 需要依赖 commons-io.jar 这个包,所以两个包我们都要引入。 **第一步,就是需要导入两个 jar 包**: commons-fileupload-1.2.1.jar和commons-io-1.4.jar **commons-fileupload.jar 和 commons-io.jar 包中,我们常用的类有哪些?** ServletFileUpload 类,用于解析上传的数据。 FileItem 类,表示每一个表单项。 **常用方法有哪些?** `boolean ServletFileUpload.isMultipartContent(HttpServletRequest request)`; 判断当前上传的数据格式是否是多段的格式。 `public List
parseRequest(HttpServletRequest request)` 解析上传的数据 `boolean FileItem.isFormField() `判断当前这个表单项,是否是普通的表单项。还是上传的文件类型。true 表示普通类型的表单项。false 表示上传的文件类型 `String FileItem.getFieldName()`获取表单项的 name 属性值String `FileItem.getString()` 获取当前表单项的值。 `String FileItem.getName();` 获取上传的文件名 `void FileItem.write( file );`将上传的文件写到 参数 file 所指向抽硬盘位置 。 ```java if (ServletFileUpload.isMultipartContent(request)) { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Configure a repository (to ensure a secure temp location is used) ServletContext servletContext = this.getServletConfig().getServletContext(); File repository = new File(servletContext.getRealPath("/uploads")); factory.setRepository(repository); factory.setSizeThreshold(1024 * 1024); // 内存大小限制1M,1M之内不走临时文件模式 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(1024 * 1024 * 10); // 最大上传10M upload.setHeaderEncoding("UTF-8"); // Parse the request try { List
items = upload.parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { // 普通表单域 String name = item.getFieldName(); String value = item.getString("utf-8"); System.out.println(name + ":" + value); } else { // 文件表单域 String fieldName = item.getFieldName(); if ("file".equals(fieldName)) { String fileName = item.getName(); String contentType = item.getContentType(); //todo 这里还可以检验文件格式 boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); System.out.println(fileName); System.out.println(contentType); System.out.println(isInMemory); System.out.println(sizeInBytes); File filePath = new File(servletContext.getRealPath("/uploads/" + fileName)); item.write(filePath); // 保存文件到指定路径 } } } } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("enctype错误"); } ``` ## 下载 ```java String fileName = "/static/img/1.png"; ServletContext servletContext = getServletContext(); // 设置数据类型 String mimeType = servletContext.getMimeType(fileName); response.setHeader("Content-Type", mimeType); response.setHeader("Content-Disposition", "attachment; filename=" + "tmp.png"); ServletOutputStream outputStream = response.getOutputStream(); // /斜杠被服务器解析表示地址为http://ip:prot/工程名/ 映射 到代码的Web目录 InputStream resourceAsStream = servletContext.getResourceAsStream(fileName); // 方案一: // int len; // byte[] bytes = new byte[1024]; // while ((len = resourceAsStream.read(bytes)) > 0) { // outputStream.write(bytes, 0, len); // } /// 方案二: IOUtils.copy(resourceAsStream, outputStream); outputStream.close(); resourceAsStream.close(); ```
EL表达式与JSTL标签库
cookie与session
文章目录