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++


相关文章
|
7月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
9月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
579 0
java引入本地 MultipartFile 实现多部分文件上传
在Java中,`MultipartFile`通常用于处理通过HTML表单上传的文件。但在某些情况下,需要直接从本地文件系统获取文件并上传。本文介绍如何创建一个实现了`MultipartFile`接口的本地类`LocalMultipartFile`,将本地文件转换为`MultipartFile`对象,简化文件上传流程。此方法适用于批量上传等场景,避免了表单上传的复杂性。代码示例展示了如何实现和使用该类进行文件上传操作。作者:华科云商小彭。链接:[稀土掘金](https://juejin.cn/post/7377559533785530431)。
757 18
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
320 4
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
168 2
|
Java
java 文件上传和下载
java 文件上传和下载
148 0
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
777 5
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
6108 2
|
移动开发 JavaScript 前端开发
Javaweb之Vue路由的详细解析
Vue.js是一款备受欢迎的前端框架,以其简洁的API和组件化开发模式著称。Vue Router作为其官方路由管理器,在构建单页面应用(SPA)时发挥关键作用,通过URL变化管理组件切换,实现无刷新过渡。本文将详细介绍Vue Router的基础概念、主要功能及使用步骤,帮助JavaWeb开发者快速掌握其工作原理及实践应用。
181 1
|
JSON JavaScript 前端开发
Javaweb中Vue指令的详细解析与应用
Vue指令提供了一种高效、声明式的编码方式,使得开发者可以更专注于数据和业务逻辑,而不是DOM操作的细节。通过熟练使用Vue指令,可以极大地提高开发效率和项目的可维护性。
157 3