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

  • FileItem接口:

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

FileItem接口常用方法

方法

返回类型

说 明

getFieldName()

String

返回表单字段元素的name属性值

isFormField()

boolean

判断FileItem封装的数据是属于普通表单字段还是文件表单字段,普通表单字段返回true,文件表单字段返回false

getName()

String

返回上传文件字段中的文件名,文件名通常是不含路径信息的,取决于浏览器实现

write(File file)

void

将FileItem对象中的内容保存到指定文件中

getString(String encoding)

String

按照指定的编码格式将内容转换成字符串返回

  • FileItemFactory接口与DiskFileItemFactory类:

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

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

FileItemFactory factory = new DiskFileItemFactory();
  • ServletFileUpload类:

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

public ServletFileUpload(FileItemFactory fileitemfactory)

ServletFileUpload类的常用方法

方法

返回类型

说 明

isMultipartContent(HttpServletRequest request)

boolean

静态方法,用于判断请求数据中的内容是否是multipart/form-data类型,是返回true,否返回false

parseRequest(HttpServletRequest request)

List

将请求数据中的每一个字段单独封装成FileItem对象,并以集合方式返回

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

(1)获取组件:使用commons-fileupload组件需要获取两个必要的 jar 包,分别是 commons-fileupload-1.2.2.jar 和 commons-io-2.4.jar 。下载地址分别是:http://commons.apache.org/fieupload/download_fileupload.cgi 和 http://commons.apache.org/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="org.apache.commons.fileupload.FileItem"%>
<%@ page import="org.apache.commons.fileupload.FileItemFactory"  %>
<%@ page import="org.apache.commons.fileupload.FileUploadException"  %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>

具体代码如下:

<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java"import="java.util.*,org.apache.commons.fileupload.servlet.*,org.apache.commons.fileupload.*"pageEncoding="utf-8"%>
<%@ page language="java" import="org.apache.commons.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 com.kgc.cn;import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.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);%>

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

使用commons-fileupload组件上传文件(随笔)相关推荐

  1. 使用Fileupload组件上传文本和文件

    使用fileupload组件上传文本和文件 绪论 使用fileupload组件可以很方便的向服务器上传数据,包括表单数据以及二进制文件,比如pdf.图片视频等等.下面演示如何上传form表单数据以及二 ...

  2. javaweb上传文件_javaWeb中,如何通过CommonsFileUpload组件上传文件

    大家好,欢迎来到雄雄的小课堂,今天给大家分享的是<javaWeb中,如何通过Commons-FileUpload组件上传文件> 前言:文件上传大家都不陌生,在这个互联网飞速发展的时代,共享 ...

  3. 使用SmartUpload组件上传文件

    刚刚上手的项目 被文件上传困扰了好久,之前用fileupload组件上传,代码参考孤傲苍狼博客,可是除了文件名,表单内的其他内容不知道该怎么读出来进行存储:所以此次采用smartupload组件进行上 ...

  4. 在jsp中使用smartupload组件上传文件- -

    在jsp中使用smartupload组件上传文件- - jsp对上传文件的支持不象php中支持的那么好,直接做成了函数,也不象asp中要通过组件才能实现.jsp中可以通过javabean来实现.但是我 ...

  5. element-ui upload组件 上传文件类型限制

    element-ui upload组件 上传文件类型限制 <el-uploadclass="c-upload"ref="upload":action=&q ...

  6. 使用SmartUpload组件上传文件,自己踩过的坑

    昨天使用SmartUpload组件上传文件,代码很简单: smartupload_demo01.html <html> <head><title>smartuplo ...

  7. ant design Upload组件上传文件类型

    Upload组件上传文件类型设置 1.设置上传文件类型为excel <template><a-uploadname="file":multiple="t ...

  8. asp实现无组件上传文件原理

    一.上传网页     上传页面代码: <form   action="upload.asp"   method="post"   enctype=&quo ...

  9. 十分钟学会使用fileupload插件上传文件

    使用fileupload上传文件 相关插件的安装 commons-io 官方下载地址 commons-fileupload 官方下载地址 示例 JSP完成页面展示 要完成文件上传操作,必须使用file ...

最新文章

  1. 美国新桥投资集团(Newbridge Capital) [from baike]
  2. openssl 代码分析(1)
  3. 数据采集中的采样率、缓冲区大小以及,每通道采样数之间的关系
  4. android listview 游标,Android Listview - 使用游标时无法选择多个项目
  5. OpenCASCADE:绘制演示脚本
  6. jquery实现单击div切换背景,再次单击回到原来样式
  7. Unix/Linux/BSD 它们之间的关系以及各自派系的介绍
  8. linux双显卡配置_Linux系统怎么配置双显卡?
  9. 日常赠书 | 王者荣耀的觉悟AI是怎么训练的?
  10. mysql中explain的详细解释
  11. 计算机自带输入法在哪里设置方法,电脑输入法设置在哪里_电脑输入法在哪里删除...
  12. 领导含泪叮嘱我:MySQL 建表字段记得用 not null,不然就收拾包袱滚蛋
  13. php chr 1,PHP chr()用法及代码示例
  14. Spring boot出现java.awt.HeadlessException【已解决】
  15. Cadence学习三:如何快速的建立artwork层?
  16. Glide系列(四) — Glide缓存流程分析
  17. Navicat导出数据库表
  18. FreeEIM 网站地图 A
  19. 7/19项目学习成果
  20. 【厚积薄发系列】C++项目总结14—Windows平台下异常捕获不到问题分析

热门文章

  1. 小谈导数、梯度和极值
  2. 【蓝桥杯选拔赛真题53】Scratch破解保险柜 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
  3. 2020年中国包子行业需求量和市场规模分析[图]
  4. Java ——MongDB 插入数据、 模糊查询、in查询
  5. java之Instrumentation
  6. 施迈赛IFL 50-385-11P-M20感应式接近开关
  7. 90%的人都有的图表使用误区,赶紧看看自己是否中招
  8. Druid 德鲁伊连接池技术
  9. python数据分析董付国答案,python程序设计 董付国答案
  10. 做刷脸项目找靠谱的刷脸支付服务商合作