室友画圣诞树的时候,我卷了一把文件上传和下载(一)

简介: 1. 文件传输原理及介绍2. JavaWeb文件上传2.1我们用一个新的方式创建项目2.2 导包2.3 实用类介绍FileItem类ServletFileUpload类2.4 pom.xml导入需要的依赖

1. 文件传输原理及介绍


微信图片_20211231142152.png


2. JavaWeb文件上传


2.1我们用一个新的方式创建项目

微信图片_20211231142156.png

微信图片_20211231142220.png


空项目会直接弹出框


微信图片_20211231142224.png


把jdk版本设置好


微信图片_20211231142339.png


点击确定后是比较干净的,啥都不会,不要慌,点击file->new->module。之后就和之前做过的一样了


创建model:file,配置tomcat运行保证没有错误


2.2 导包


可以选择去maven仓库中下,也可以在官网上搜出来然后复制到项目中,我们创建一个文件夹lib,然后如果从外面复制到项目中需要右键点击add as library添加到内库中


微信图片_20211231142434.png

微信图片_20211231142438.png


  • 上述只是讲一个新建项目的方式,我后面还是按照之前的用maven进行了一个项目完成


2.3 实用类介绍


文件上传的注意事项


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


  • 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名,


  • 加一个时间戳


  • UUID


  • md5


  • 自己写位运算算法


  • 要限制上传文件的最大值


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


需要用到的类详解


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


FileItem类


在HTML页面input必须有


<input type="file" name = "filename">


表单中如果包含一个文件上传输入项的话,这个表单的enctype属性就必须设置为multipart/form-data


  • 常用方法介绍
//isFromField方法用于判断FileItem类对象封装的数据是一个普通文本表单还是一个文件表单,如果是普通表单就返回true,否则返回false
boolean isFormField();
//getFieldName方法用于返回表单标签name属性的值
String getFieldName();
//getString方法用于将FileItem对象中保存的数据流内容以一个字符串返回
String getString();
//getName方法用于获得文件上传字段中的文件名
String getName();
//以流的形式返回上传文件的数据内容
InputStream getInputStream();
//delete方法用来清空FileItem类对象中存放的主体内容。如果主题内容被保存在临时文件中,delete方法将删除该临时文件
void delete();


ServletFileUpload类


ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中,使用其parseRequest(HttpServletRequest)方法可以将通过表单中每一个HTML标签提交的数据封装成一个FIleItem对象,然后以list列表的形式返回。使用该方法处理上传文件简单易用


2.4 pom.xml导入需要的依赖

<!--Servlet 依赖-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>
<!--JSP依赖-->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>




相关文章
|
6月前
|
移动开发 前端开发 JavaScript
童年回忆——开心消消乐(内含源码inscode一键运行)
童年回忆——开心消消乐(内含源码inscode一键运行)
|
2月前
|
PHP 数据库
2024表白墙PHP网站源码
2024表白墙PHP网站源码
42 1
|
6月前
|
存储 Java 数据库
学妹哭着找你教的Javaweb的文件上传与下载
该内容主要介绍了JavaWeb中的文件上传和下载操作。首先,通过一个JSP表单接收用户输入的图书信息和封面照片,表单数据提交给`AddBookServlet`。在Servlet中,使用SmartUpload库处理上传的图片,将图片以书号命名并保存至服务器,同时将图书信息存储到数据库。之后,请求转发到`ShowBook.jsp`展示所添加图书的详细信息。文件下载部分,通过`downServlet`完成,用户点击链接触发下载,Servlet设置响应头以附件形式提供文件下载。
58 1
|
6月前
|
开发框架 安全 JavaScript
分享11个网页游戏和9个黑客源码,总有一款适合你
分享11个网页游戏和9个黑客源码,总有一款适合你
79 1
|
小程序 Windows
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
真香!端午节到来,我用Python画了几个粽子送给女票,女票差点吃了我的电脑...
真香!端午节到来,我用Python画了几个粽子送给女票,女票差点吃了我的电脑...
|
SQL JavaScript Java
搭建情人节表白网站(超详细过程,包教包会)
网站的搭建其实在七夕的时候就已经弄好了,只是当时不会搭建,然后就放了好几个月,偶然发现情人节快到了,遂重新搭建了这个网站,不过说实话除了网站还真想不出有啥能够体现程序员的特长,你说各种代码,c,c++,java即时给你做出不错的GUI界面,人家还不一定会打开,网站最容易了,有手(机)就行,下面是它的效果展示视频,觉得好的记得三连哦
409 0
搭建情人节表白网站(超详细过程,包教包会)
|
存储 机器学习/深度学习 算法
大逆不道,从天界偷下来的算法修仙秘籍竟然传到你手上~~(结尾有彩蛋)
这有可能是你见过最离谱的标题 这有可能是你没见过的技术文章模式 我不知道我的选择是否正确,但是我的想法就是: 不再让技术冷冰冰,让所有人学习中获得快乐!
264 1
|
存储 小程序 数据库
手把手教你撸一个小程序带太阳码的海报分享
我们都知道,微信小程序目前还不支持转发朋友圈,可能现在Android是支持了,iOS还不支持,但总的来说还不能支持普遍机型。这样假如我们需要推荐某个心仪的商品到朋友圈就没法分享出去,于是就可以使用生成海报的形式,让商品详情页的信息显示在一张图片上,保存到手机相册,然后发朋友圈,朋友可以长按识别海报上的小程序码直达该商品详情页面,从而达到如同直接分享商品详情页的效果。
732 0
手把手教你撸一个小程序带太阳码的海报分享
|
编译器 C++
【C/C++教程】关于C/C++那些坑爹的破事儿,你被坑了吗?
今天,就带大家看看C/C++里面究竟有多少不为人知的秘(keng)密(die)吧。可以测试一下,不看答案,自己能get到多少。
134 0
【C/C++教程】关于C/C++那些坑爹的破事儿,你被坑了吗?