`
lyunabc
  • 浏览: 543800 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

使用Commons-fileupload组件实现文件上传

 
阅读更多

文件的上传

一 概念

1.实现web开发中的文件上传功能,需完成如下二个步骤:

(1)在web页面中添加上传输入项(jsp页面或html页面)

(2)在 servlet中读取上传文件的数据,并保存在本地硬盘中

2.如何在web页面中添加输入项

<input type=”file”>标签用于在web页面中添加文件上传输入项

(1)必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据

(2)必须把form的enctype属性值设置为multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在http请求消息体中,并使用MIME协议对上传的文件进行描述,以方便接收方对上传数据进行解析和处理。

3.如何在servlet中读取文件中上传的数据并保存到本地硬盘中

使用Commons-fileupload组件实现文件上传

二 核心API

1.DiskFileItemFactory 工厂类

DiskFileItemFactory 是创建 FileItem 对象的工厂,这个工厂类常用方法:

(1)public void setSizeThreshold(intsizeThreshold) :设置内存缓冲区的大小,默认值为10K。当上传文件大于缓冲区大小时,fileupload组件将使用临时文件缓存上传文件。

(2)public void setRepository(java.io.Filerepository) :指定临时文件目录,默认值为System.getProperty("java.io.tmpdir").

(3)public DiskFileItemFactory(int

sizeThreshold, java.io.Filerepository) :构造函数

2. ServletFileUpload 解析类

ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装成一个 FileItem 对象中。常用方法有:

(1)boolean isMultipartContent(HttpServletRequestrequest) :判断上传表单是否为multipart/form-data类型

(2)List parseRequest(HttpServletRequestrequest):解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,并返回一个保存了所有FileItem的list集合。

(3)setFileSizeMax(longfileSizeMax) :设置上传文件的最大值

(4)setSizeMax(longsizeMax) :设置上传文件总量的最大值

(5)setHeaderEncoding(java.lang.Stringencoding) :设置编码格式

(6)setProgressListener(ProgressListenerpListener)

三 思路分析

1.文件上传的思路分析

文件上传必定要用jsp中的form标签来显示页面,只要把input的类型设置为file就OK,再者就是在点击上传文件按钮的时候,要做处理,处理当然要交到servelt层去处理了,在servlet中获取消息头中的值,并判断是否是输入项,如果正确,跳转到成功页面,如果失败,跳转到失败页面。注意在上面介绍了在web页面中添加的输入项,必须修改form表单中的默认选项。

2.实现的具体思路

在servelt中用Apache中提供的组件实现上传

Fileupload组件的工作流程

把请求消息中每一个请求项都解析成对象item1 item2...

Fileltem[] item = ServeltFileupLoad upload.parseRequest()

item1.isFormFiled()

如果返回的是true,则说明是普通的输入项,可调用

Item1.getString() 来得到输入项的值 老王

Item1.getFieldName() 得到输入项的名字 user

如果返回值是false,则说明是文件的上传项,可调用

Item1.getName()得到用户上传的文件的文件名

getInputStream()流对象得到内容

四 代码分析

1.upload.jsp页面 --- 用来给用户显示页面

<body>

<form action="${pageContext.request.contextPath}/servlet/uploadServlet" method="post" enctype="multipart/form-data">

上传用户:<input type="text" name="user"/><br/>

上传文件:<input type="file" name="file1"/><br/>

上传文件:<input type="file" name="file2"/><br/>

<input type="submit" value="上传文件"/>

</form>

</body>

2.UploadServlet2.java --- 用来处理从upload.jsp中传的值

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

try {

// (1)创建一个解析器工厂

DiskFileItemFactory factory = new DiskFileItemFactory();

// (2)得到解析器

ServletFileUpload upload = new ServletFileUpload(factory);

//文件上传乱码

upload.setHeaderEncoding("utf-8");

// (3)对请求进行解析,有几个输入项,就有几个FileItem对象

List<FileItem> list = upload.parseRequest(request);

// (4)迭代list集合,获取list集合中的每一个输入项

for (FileItem item : list) {

// (1)判断输入的类型 item.isFormField()如果为真,为普通的输入项

if (item.isFormField()) {

// 普通的输入项

String inputName = item.getFieldName();//输入项的名称

String inputValue = item.getString();//输入项的value值

System.out.println("输入项的名称:" + inputName + " 输入项的value值 "

+ inputValue);

} else {

// 上传文件的输入项

// 上传文件的文件名,得到的是完全的路径

String fileName = item.getName(); fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);// 得到上传的文件名

// 1.txt(不同的浏览器,得到的文件名不一样)

InputStream is = item.getInputStream();// 得到上传的输入流

// 输出到本地磁盘上

FileOutputStream fos = new FileOutputStream("c:\\"+ fileName);

byte[] buff = new byte[1024];

int len = 0;

while ((len = is.read(buff)) > 0) {

fos.write(buff, 0, len);

}

is.close();

fos.close();

}

}

// 上传成功转向

request.setAttribute("message", "上传成功");

} catch (FileUploadException e) {

e.printStackTrace();

// 如果出现异常,转向

request.setAttribute("message", "上传失败");

}

request.getRequestDispatcher("/message.jsp").forward(request, response);

}

3. message.jsp 成功或失败的跳转页面

<body>
<h2>${message}</h2>
</body>

分享到:
评论

相关推荐

    commons-fileupload组件和commons-io组件

    在实际使用中,Commons-Fileupload通常与Commons-IO结合,实现完整的文件上传流程。例如,当文件上传完成后,我们可以使用Commons-IO的工具类将文件移动到目标位置,或者进行进一步的处理。这两个组件极大地简化了...

    commons-fileupload组件上传问题

    通过阅读这篇博客,开发者可以更好地理解如何在Java Web应用中使用`commons-fileupload`组件实现安全、高效的文件上传功能。 总结起来,`commons-fileupload`组件是处理HTTP文件上传的利器,它简化了文件上传的流程...

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    `commons-fileupload-1.3.3.jar` 是这个库的特定版本,它包含了处理文件上传的核心组件。该库提供了一套完整的API,允许开发者解析HTTP请求中的文件项,进而可以将这些文件存储到服务器上。这个版本的更新可能包括了...

    commons-fileupload实现文件上传下载

    ### Commons-FileUpload 实现文件上传下载 #### 知识点概述 Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 ...

    基于commons-fileupload组件的上传下载

    以下将详细介绍如何使用commons-fileupload组件实现文件上传和下载。 首先,你需要在项目中引入必要的依赖库。如【描述】中所述,需要导入`javacommons-fileupload-1.2.1.jar`和`commons-io-1.4.jar`两个文件,这两...

    commons-fileUpload组件

    标题"commons-fileUpload组件"指的是Apache Commons FileUpload,这是一个Java库,专门用于处理HTTP请求中的文件上传。它与另一个组件Apache Commons IO紧密协作,为Java应用程序提供方便、高效的文件上传功能。 ...

    java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载

    在Java Web开发中,文件的上传与下载是常见的功能需求,尤其...通过以上步骤,你可以实现基于Java Servlet和Apache Commons库的文件上传与下载功能。理解并熟练掌握这些知识点,对于开发高效、稳定的Web应用至关重要。

    commons-fileupload-1.3.2.jar和commons-io-2.5.jar

    在使用`commons-fileupload-1.3.2.jar`处理文件上传时,通常会配合`commons-io-2.5.jar`来完成一些辅助操作,例如读取上传文件的内容、检查文件类型、移动文件到目标位置等。通过这两个库的组合,开发者能够方便地在...

    使用commons-fileupload上传文件

    通过使用`commons-fileupload`,开发者可以方便地在Java Web应用中实现文件上传功能,而无需关注底层的HTTP协议细节。这个组件提供了丰富的API,支持各种自定义选项,例如内存阈值、临时文件存储位置等,使得文件...

    commons-fileupload.jar和commons-io.jar

    Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...

    commons-fileupload及源码

    Apache Commons FileUpload是一个Java库,专门用于处理HTTP...通过结合使用`commons-fileupload-1.3.1.jar`和`commons-fileupload-1.3.1-sources.jar`,开发者可以轻松地在自己的项目中实现安全、高效的文件上传功能。

    struts1.2和commons-fileupload实现文件上传

    Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...

    commons-fileupload-1.3.3-bin

    5. **多文件上传**:Apache Commons FileUpload支持单个文件和多个文件的上传,可以通过`&lt;input type="file" multiple&gt;`在HTML表单中实现。 在压缩包中,除了`commons-fileupload-1.3.3-bin`外,还包含了一个`...

    commons-fileupload-1.3.1.jar

    Apache Commons FileUpload库简化了这一过程,提供了高效且灵活的文件上传解决方案。 Apache Commons是Apache软件基金会的一个项目集合,它提供了许多实用工具类和组件,用于解决Java编程中的常见问题。"commons...

    基于commons-fileupload组件的文件上传系统

    采用apache commons 项目中的fileupload组件,实现了文件上传功能,它能够便利而简单地使得web应用程序和servlet具备高性能的文件上传能力,减小了直接操作输入输出流的系统开销。

    利用commons-fileupload组件实现文件上传-实例

    通过以上步骤,我们就使用Apache Commons FileUpload组件实现了一个基本的文件上传功能。你可以根据自己的需求对这个示例进行扩展,比如添加错误处理、文件类型检查和存储优化等。参考提供的博文链接,可以获取更多...

    commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar

    综上所述,这些组件的结合使用,可以构建一个健壮的、能够处理文件上传以及与数据库交互的Java Web应用,是Java开发中常见的技术栈配置。开发者在实际项目中,可以通过这些工具来提升应用的稳定性和效率。

    commons-fileupload-1.3.2.jar

    总之,Apache Commons FileUpload是Java Web开发中处理文件上传不可或缺的工具,它提供了高效、灵活且安全的文件上传解决方案。通过理解和熟练运用这个库,开发者可以轻松地在自己的应用中实现复杂的文件上传功能。

    commons-fileupload-1.4-bin.zip

    《Apache Commons FileUpload组件详解》 Apache Commons FileUpload是一个用于处理HTTP请求中多部分数据的Java库,尤其在上传文件时极为有用。标题中的"commons-fileupload-1.4-bin.zip"表明这是一个包含Apache ...

Global site tag (gtag.js) - Google Analytics