使用commons-fileupload组件上传文件(随笔)
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组件上传文件(随笔)相关推荐
- 使用Fileupload组件上传文本和文件
使用fileupload组件上传文本和文件 绪论 使用fileupload组件可以很方便的向服务器上传数据,包括表单数据以及二进制文件,比如pdf.图片视频等等.下面演示如何上传form表单数据以及二 ...
- javaweb上传文件_javaWeb中,如何通过CommonsFileUpload组件上传文件
大家好,欢迎来到雄雄的小课堂,今天给大家分享的是<javaWeb中,如何通过Commons-FileUpload组件上传文件> 前言:文件上传大家都不陌生,在这个互联网飞速发展的时代,共享 ...
- 使用SmartUpload组件上传文件
刚刚上手的项目 被文件上传困扰了好久,之前用fileupload组件上传,代码参考孤傲苍狼博客,可是除了文件名,表单内的其他内容不知道该怎么读出来进行存储:所以此次采用smartupload组件进行上 ...
- 在jsp中使用smartupload组件上传文件- -
在jsp中使用smartupload组件上传文件- - jsp对上传文件的支持不象php中支持的那么好,直接做成了函数,也不象asp中要通过组件才能实现.jsp中可以通过javabean来实现.但是我 ...
- element-ui upload组件 上传文件类型限制
element-ui upload组件 上传文件类型限制 <el-uploadclass="c-upload"ref="upload":action=&q ...
- 使用SmartUpload组件上传文件,自己踩过的坑
昨天使用SmartUpload组件上传文件,代码很简单: smartupload_demo01.html <html> <head><title>smartuplo ...
- ant design Upload组件上传文件类型
Upload组件上传文件类型设置 1.设置上传文件类型为excel <template><a-uploadname="file":multiple="t ...
- asp实现无组件上传文件原理
一.上传网页 上传页面代码: <form action="upload.asp" method="post" enctype=&quo ...
- 十分钟学会使用fileupload插件上传文件
使用fileupload上传文件 相关插件的安装 commons-io 官方下载地址 commons-fileupload 官方下载地址 示例 JSP完成页面展示 要完成文件上传操作,必须使用file ...
最新文章
- 美国新桥投资集团(Newbridge Capital) [from baike]
- openssl 代码分析(1)
- 数据采集中的采样率、缓冲区大小以及,每通道采样数之间的关系
- android listview 游标,Android Listview - 使用游标时无法选择多个项目
- OpenCASCADE:绘制演示脚本
- jquery实现单击div切换背景,再次单击回到原来样式
- Unix/Linux/BSD 它们之间的关系以及各自派系的介绍
- linux双显卡配置_Linux系统怎么配置双显卡?
- 日常赠书 | 王者荣耀的觉悟AI是怎么训练的?
- mysql中explain的详细解释
- 计算机自带输入法在哪里设置方法,电脑输入法设置在哪里_电脑输入法在哪里删除...
- 领导含泪叮嘱我:MySQL 建表字段记得用 not null,不然就收拾包袱滚蛋
- php chr 1,PHP chr()用法及代码示例
- Spring boot出现java.awt.HeadlessException【已解决】
- Cadence学习三:如何快速的建立artwork层?
- Glide系列(四) — Glide缓存流程分析
- Navicat导出数据库表
- FreeEIM 网站地图 A
- 7/19项目学习成果
- 【厚积薄发系列】C++项目总结14—Windows平台下异常捕获不到问题分析