77.【JavaWeb文件上传和邮件发送04】(一)

简介: 77.【JavaWeb文件上传和邮件发送04】

(二十五)、文件上传

1.首先创建一个empty项目

2.配置project项目中的JDK

3.设置模板

4.添加web外部支持

5.基本思路

1.准备工作

下载两个jar包:

apache commons FileUpload

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

apache commons io

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

创建一个lib目录,然后把下载后的两个jar包放入到lib目录下,然后右键

点击 Add as library

点开项目结构,发现我们手动导入的lib目录不存在,所以要解决为问题

解决问题的存在

2.实用类介绍

文件上传的注意事项:

1.为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如

WEB-INF目录下

2.为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名(时间戳,uuid md5)

3.要限制上传文件的最大值 (比如朋友圈上传的视频,限制文件)

4.可以限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法。

需要用到的类详解:

ServletFileUpload负责处理上传的文件数据,并将表单中的每个输入项封装成一个Filetem对象,在使用ServletFileUpload对象解析请求时需要DiskFileletemFactory对象。所以,我们需要在进行解析工作前构造好DiskFileltemFactory对象,通过servletFileUpload对象的构造方法或setFileltemFactory()方法设置ServletFileUpload对象的FileitemFactory属性

3.思维导图:

4.正戏开始

(1).表单如果包含一个文件上传输入项的化,这个表单的enctype属性就必须设置为multipart/form-data
(2).在html页面input中必须有一个<input type="file" name="filename">
(3).  get: 上传文件大小限制    post: 上传文件大无限制

1.创建文件目录

//* 判断文件上传的是普通表单还是带文件的表单,
        if(ServletFileUpload.isMultipartContent(req)){
            return;//如果是普通表带那就进入直接返回,否则就不运行
        }try {
//创建上传文件的保存路径,建议保存为在web-inf的路径下,用户无法直接访问上面的图片
        String realPath = this.getServletContext().getRealPath("/WEB-INF/upload");
// 创建一个文件目录
        File file = new File(realPath);
//  假如说文件目录不存在情况下,我们就创建
        if(!file.exists()){
            file.mkdir(); //创建这个目录
        }

2.创建临时文件目录

//*  缓存,临时文件。假如文件超过了预期的大小,我们就把他放入到一个临时文件中,活几天自动删除或提示用户转存为永久
        String tempRealPath = this.getServletContext().getRealPath("/WEB-INF/upload");
// 创建一个文件目录
        File tempFile = new File(tempRealPath);
//  假如说文件目录不存在情况下,我们就创建
        if(!tempFile.exists()){
            tempFile.mkdir(); //创建这个临时目录
        }

3.设置工厂

//* 处理上传的文件,一般都需要通过流来获取,我们可以使用req.getInputStream(),原生态的上传流获取,十分麻烦
//  但是我们都建议使用Apeache的文件上传组件来实现,common.fileupload,它需要依赖于commons-io组件
// ***************** 1.创建DiskFileItemFactory对象,处理文件上传路径或则大小限制的
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//  2.通过这个工厂设置一个缓冲区,当上传的文件大于这个缓冲区的时候,将她放到临时文件中去
        diskFileItemFactory.setSizeThreshold(1024*1024);  //缓存大小为1MB
//  3.
        diskFileItemFactory.setRepository(tempFile);   //临时目录的保存目录,需要一个file

4.获取servletFileUpload

// ******************* 4.获取servletFileUpload
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//  5.监听文件上传的速度
        servletFileUpload.setProgressListener(new ProgressListener() {
            public void update(long l, long l1, int i) {
                System.out.println("总大小"+l1+"已上传:"+l);
            }
        });
//  处理乱码问题
    servletFileUpload.setHeaderEncoding("UTF-8");
//  设置单个文件的最大值
//   1024=1kb*1024=1MB*10=10MB
     servletFileUpload.setSizeMax(1024*1024*10);

implements sericlizable : 标记接口,JVM----》本地方法栈 native -->C++


相关文章
|
1月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
307 37
|
10天前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
21 2
|
17天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
20 5
|
18天前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
114 1
|
1月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
27天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
62 2
|
15天前
|
Java
java 文件上传和下载
java 文件上传和下载
15 0
|
1月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
3月前
|
Java
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
112 9
|
3月前
|
缓存 前端开发 Java
在Java项目中实现高性能的文件上传下载
在Java项目中实现高性能的文件上传下载