1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用commons-fileupload组件上传文件(随笔)

使用commons-fileupload组件上传文件(随笔)

时间:2020-08-23 18:54:30

相关推荐

使用commons-fileupload组件上传文件(随笔)

1.第三方控件又被称为是第三方组件,使用第三方组件,可以避免大量编码,减少开发工作量及由于逻辑或算法造成的程序异常,从而降低开发成本,提高开发效率。由于第三方组件是第三方组织或者个人提供的,在开发时提供的版本可能会出现Bug,一些缺点,解决时就相当麻烦;但是对于应用也是很广泛,有很明显的优势,其中,commons-fileupload组件是由Apache开发的一个应用于文件上传的组件,其特点就是使用方便、简单,该组件涉及的API介绍如下:

FileItem接口:

FileItem是一个接口,在该接口中定义了用于处理表单内容以及文件内容的方法。在应用过程中,每一个表单中的单个字段元素,都会被封装成一个FileItem类型的对象,通过调用FileItem对象的相关方法可以得到相关表单字段元素的数据,在应用程序中,可以直接用FileItem接口进行访问。

FileItem接口常用方法

FileItemFactory接口与DiskFileItemFactory类:

FileItemFactory是一个接口,是用于构建FileItem实例的工厂。

DiskFileItemFactory类是FileItemFactory接口的实现类。构造实例的语法格式如下:

FileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload类:

ServletFileUpload类是 Apache 文件上传组件中用于处理文件上传的一个核心类。它的作用是以 List 形式返回每一个被封装成 FileItem 类型的表单元素集合。其构造语法如下:

public ServletFileUpload(FileItemFactory fileitemfactory)

ServletFileUpload类的常用方法

使用commons-fileupload组件上传文件:

(1)获取组件:使用commons-fileupload组件需要获取两个必要的 jar 包,分别是 commons-fileupload-1.2.2.jar 和 commons-io-2.4.jar 。下载地址分别是:/fieupload/download_fileupload.cgi 和 /io/download_io.cig 。

(2)将解压后的两个jar文件复制到项目中的WEB-INF/lib目录下,并导入到项目中。如下图:

(3)修改表单,在<form>标签中修改并添加如下代码:

method="post" enctype="multipart/form-data"

其中,enctype="multipart/form-data"明确表单提交时采用二进制进行数据传输,简单来说就是表单提交时以多部分内容进行提交,可能是普通表单,也可能是包含文件的表单。如果表单中未设置enctype="multipart/form-data",则无法实现文件上传。

(4)设置上传文件标签:“file”标签

<input type="file" name="userfile" value="" />

首页 index.jsp内容如下:

<form action="filedeal.jsp" method="post" enctype="multipart/form-data">请输入账号:<input type="text" name="username" /> <br />请输入密码:<input type="password" name="userpwd" /><br /> <input type="file" name="userfile" value="" /><input type="submit" value="提交" /></form>

代码效果图:

发布后运行服务器,启动网页效果如下图:

(5)在表单提交的处理页面将实现文件上传所需要的包导入,所需的包如下:

<%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="mons.fileupload.FileItem"%><%@ page import="mons.fileupload.FileItemFactory"%><%@ page import="mons.fileupload.FileUploadException"%><%@ page import="mons.fileupload.disk.DiskFileItemFactory"%><%@ page import="mons.fileupload.servlet.ServletFileUpload"%>

具体代码如下:

<%@page import="mons.fileupload.servlet.ServletFileUpload"%><%@ page language="java"import="java.util.*,mons.fileupload.servlet.*,mons.fileupload.*"pageEncoding="utf-8"%><%@ page language="java" import="mons.fileupload.disk.*"%><%@ page language="java" import="java.io.*"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'filedeal.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><%//取到文件读取路径String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/");//判断表单是否设置了上传属性(读取request请求,判断是否是多部分内容表单提交)boolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {//产生关键对象upload,该对象用来取数据//创建FileItemFactory实例FileItemFactory factory = new DiskFileItemFactory();//创建ServletFileUpload实例ServletFileUpload upload = new ServletFileUpload(factory);//把request中的数据装换成FileItem的集合(解析request请求中的数据)List<FileItem> files = upload.parseRequest(request);//依次操作每一个表单数据for (int i = 0; i < files.size(); i++) {FileItem item = files.get(i);//判断是普通值还是文件,false表示是文件if (!item.isFormField()) {//取到文件名File fullFile = new File(item.getName());//创建文件流File uploadFile = new File(uploadFilePath, fullFile.getName());//把文件流存储到磁盘(tomcat目录下)item.write(uploadFile);} else {String username = "";String userpwd = "";//取表单的name属性值String fieldName = item.getFieldName();if (fieldName.equals("username")) {//取value值并转化成utf-8username = item.getString("utf-8");} else if (fieldName.equals("userpwd")) {userpwd = item.getString("utf-8");}System.out.println(username + "\t" + userpwd);}}}%></body></html>

(6)提前在tomcat目录下建好文件包upload:如下如所示路径:

(7)运行服务器后启动网页,运行效果如下:

网页界面:

完成登陆,选择文件提交前页面:

提交后页面跳转且控制台输出登陆信息:

控制台输出登陆信息:

查看upload文件夹里面的文件:

以上代码运行成功!!!!!!

///

改写在Java的代码:

package ;import java.io.File;import java.io.UnsupportedEncodingException;import java.util.List;import javax.servlet.http.HttpServletRequest;import mons.fileupload.FileItem;import mons.fileupload.FileItemFactory;import mons.fileupload.FileUploadException;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;public class FielDealBean {public boolean dealFile(HttpServletRequest request) {// 取到文件读取路径String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/");// 判断表单是否设置了上传属性boolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {// 产生关键对象upload,该对象用来取数据FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);// 把request中的数据装换成FileItem的集合List<FileItem> files = null;try {files = upload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();}// 依次操作每一个表单数据for (int i = 0; i < files.size(); i++) {FileItem item = files.get(i);// 判断是普通值还是文件,false表示是文件if (!item.isFormField()) {// 取到文件名File fullFile = new File(item.getName());// 创建文件流File uploadFile = new File(uploadFilePath, fullFile.getName());try {// 把文件流存储到磁盘(tomcat目录下)item.write(uploadFile);} catch (Exception e) {e.printStackTrace();}} else {String username = "";String userpwd = "";// 取表单的name属性值String fieldName = item.getFieldName();if (fieldName.equals("username")) {try {// 取value值并转化成utf-8username = item.getString("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (fieldName.equals("userpwd")) {try {userpwd = item.getString("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}System.out.println(username + "\t" + userpwd);}}return false;}return true;}}

主页面MyJsp.jsp

<form action="filedo.jsp" method="post" enctype="multipart/form-data">请输入账号:<input type="text" name="username" /> <br />请输入密码:<input type="password" name="userpwd" /><br /> <input type="file" name="userfile" /><input type="submit" /></form>

跳转页面filedo.jsp

<%FielDealBean fieldealbean=new FielDealBean();fieldealbean.dealFile(request);%>

运行效果一样!!!!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。