Javaweb学习笔记(文件上传与下载)

这篇博客详细介绍了JavaWeb中实现文件上传和下载的步骤。文件上传借助Apache的FileUpload组件,解析multipart/form-data类型请求,通过FileItem接口和ServletFileUpload类处理上传的文件,设置大小限制并保存到指定位置。文件下载则利用Servlet直接处理输入输出流,设置响应头实现。
摘要由CSDN通过智能技术生成

如何实现文件上传

在Web应用中,由于大数文件的上传都是通过表单的形式,提交给服务器的,因此要想在程序中实现文件上传的功能,首先要创建一个用于提交上传的表单页面。为了使Servlet程序可以获取到上传文件的数据,需要将表单页面的method属性设置为post方式,enctype属性设置为multipart/form-data类型,天剑文件的input标签设置为file类型。
当浏览器通过表单提交上传文件时,由于文件数据都附带在HTTP请求消息体中,并且文件数据都附带在HTTP请求消息体中,并且采用MIME类型进行描述。
请求正文分为多个部分,解析这部分内容比较麻烦,为此Apache组织提供了一个开源组件,该组件可以方便地将multipart/form-data类型请求中的各种表单域解析出来并实现一个或多个文件的上传,同时也可以限制文件上传的大小等内容并且性能优异,使用及其简单。需要注意的是在使用FileUpload组件时,需要导入commons-fileupload和commons-is两个jar包。

文件上传的相关API

Fileltem接口

File接口用于封装单个表单字段元素的数据,一个表单字段元素对应FileItem对象。为了便于讲解,为此将FilItem的实现类称为FileItem类,FileItem类实现Serializable接口,因此支持序列化操作,在FileItem类中定义了许多获取表单字段元素的方法。

boolean isFormFileld()方法

isFormField()方法用于判断,FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果是普通表单字段则返回true,否则返回false。

String getName()方法

getName()方法用于获得文件上传字段中的文件名,如果FileItem类对象对应的是普通表单字段,getName()方法将返回null,否则只要浏览器将文件的字段信息传递给服务器,getName()方法就会返回一个字符串类型的结果。

String getFieldName()方法

getFieldName()方法用于获取表单字段元素描述头name属性值,也是表单标签name属性的值。

void write(File file)方法

write()方法用于将FileItem对象中保存的主体保存到某个指定的文件中。如果FileItem对象中的主体内容是保存在某个临时文件中,那么该方法顺利完成后,临时文件有可能被清除。

String getString()方法

getString()方法用于将FileItem对象中保存的数据流内容以一个字符串返回,两个重载的定义形式:
(1)public String getString()
(2)public String getString(java.lang.String.encoding)
在上面重载的方法中,前者使用默认字符集编码酱猪蹄内容转换成字符串,后者使用参数指定的字符集编码将主体内容转化成字符串。

String getContentType()方法

getContentType()方法用于获得上传文件的类型,即表单字段元素描述头属性“Content-Type”的值,如果FileItem类对象对应的是普通表单字段。

boolean isInMemory()方法

isInMeory()方法用来判断FileItem对象封装的数据内容时存储在内存中,还是存储在临时文件中,如果存储在内存中则返回true,否则返回false。

void delete()方法

delete()方法用于清空FileItem类对象中存放的主体内容,如果主题内容被保存在临时文件中,delete()方法将删除临时文件。需要注意的是尽管FileItem对象被垃圾收集器收集会自动清除临时文件,但应该及时调用delete()方法清除临时文件,从而释放系统存储资源。

inputStream getInputStream()方法

getInputStream()方法以流的形式返回上传的数据内容。

long getSize()方法

getsize()方法返回该上传文件的大小。

DiskFileltemFactory类

DiskFileltemFactory类用于将请求消息实体中的每一个文件封装成单独的FileItem对象,入股上传文件较小,将直接保存在内存中,如果上传文件较大,则会以临时文件的形式,保存在磁盘临时文件夹中,默认情况下,默认保存在内存还是硬盘临时文件夹的临界值是10kb。DiskFileltemFactory有两个构造方法:

方法声明 功能描述
DiskFileItemFactory() 采用默认临界值和系统临时文件夹构造文件项对象
DiskFileItemFactory(int sizeThreshold,File repository) 采用参数指定临界值和系统临时文件夹构造文件项工厂对象。

第二个构造方法需要传递两个参数,第一个参数sizeThreshold代表文件保存在内存还是磁盘临时文件夹的临界值,参数repository表示临时文件的存储路径。
常用方法:

Fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值