Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。

  对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。

要实现Web开发的上传功能,通常需要完成两步操作:一是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。

上传大多数情况是通过表单的形式提交给服务器,使用<input type="file">标签。

使用<input type="file">标签需要注意以下两点:

1.必须设置name属性,不然浏览器不会发送上传文件的数据。

2.必须将method属性设置为post,ectype属性设置为“multipart/form-data”类型。

由于在Servlet直接读取上传数据,并且解析出相应文件数据是一项非常麻烦的工作。为了方便处理上传数据,Apache组织提供了一个开源组件Commons-FileUpload。该组件可以将“multipart/form-data”类型请求的各种表单域解析出来,并实现一个或多个文件上传,同时也可以限制上传文件的大小等内容。其性能十分优异,使用极其简单。

Fileltem 接口
Fileltem 接口在Commons-FileUpload组件中被实现,其主要用于封装单个表单字段元素的数据,一个表单字段元素对应一个Fileltem对象。Commons-FileUpload组件在处理文件上传的过程中,将每一个表单域(包括普通的文本表单域和文件域)封装在一个Fileltem对象中。
为了便于讲解,在此将Fileltem接口的实现类称为Fileltem类,Fileltem类实现了Serializable接口,因此,支持序列化操作。

(1)boolean isFormField()

(2)String getName()

(3)String getFieldName()

(4) void write(File file)

(5)String getString()

(6)String getContentType()

(7)boolean islnMemory()

(8) void delete()

(9)InputStream getInputStream()

(10)long getSize()

DiskFileltemFactory类
DiskFileltemFactory类用于将请求消息实体中的每一个文件封装成单独的Fileltem对象。如果上传的文件比较小,将直接保存在内存中,如果上传的文件比较大,则会以临时文件的形式,保存在磁盘的临时文件夹中。默认情况下,文件保存在内存还是硬盘临时文件夹的临界值是10240,即10KB。DiskFileltemFactory类中包含两个构造方法。
**DiskFileltemFactory()**采用默认临界值和系统临时文件夹构造文件项工厂对象
**DiskFileltemFactory(int sizeThreshold,Filerepository)**采用参数指定临界值和系统临时文件夹构造文件项工厂对象
ServletFileUpload类
ServletFileUpload 类是 Apache组件处理文件上传的核心高级类,通过使用parseRequest(HttpServletRequest)方法可以将 HTML 中每个表单提交的数据封装成一个Fileltem 对象,然后以List列表的形式返回。ServletFileUpload类中包含两个构造方法。
ServletFileUpload() 构造一个未初始化的ServletFileUpload实例对象
ServletFileUpload(FileltemFactory fileltemFactory) 根据参数指定的 FileltemFactory对象创建一个ServletFileUpload对象

文件下载
DownloadServlet类主要用于设置所要下载的文件以及文件在浏览器中的打开方式。
创建下载目录文件
在WebContent目录下创建名为download的文件夹(folder),并在该文件夹下放一个名称为“1.jpg”的图片文件。

所需要的包:如下图

实现文件上传
创建项目,导包JAR
创建Servlet
UploadServlet类主要用于获取表单及其上传文件的信息。

apk上传下载java java上传和下载_apk上传下载java

apk上传下载java java上传和下载_p2p_02

apk上传下载java java上传和下载_上传_03

apk上传下载java java上传和下载_gnu_04

apk上传下载java java上传和下载_apk上传下载java_05

apk上传下载java java上传和下载_p2p_06

 接着就是看运行结果,这就是运行之后的结果

apk上传下载java java上传和下载_gnu_07

apk上传下载java java上传和下载_linq_08

apk上传下载java java上传和下载_linq_09

apk上传下载java java上传和下载_p2p_10

apk上传下载java java上传和下载_linq_11