- 浏览: 253289 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
shootboss:
可以,mark学习
Freemarker页面语法 -
java_cache:
好东西,果断收藏!
Freemarker页面语法 -
fireinjava:
${.global.x}改为${.globals.x} :) ...
Freemarker页面语法 -
贾志新:
good
Freemarker页面语法 -
贾志新:
sasasa
Freemarker页面语法
对于实现文件上传功能来说,Commons-fileupload组件是一个不错的选择,本文使用它实现了单个文件及多个文件上传,这里将实现过程写出来与大家共享。
1.单个文件上传。
页面代码:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->
.... < div id ="content" >
< fieldset >< legend > 下載列表 </ legend >
< ul >
<%
List < String > downloadList = (List < String > )request.getAttribute( " downloadList " );
if (downloadList! = null ){
for ( String str:downloadList){
out.print( " <li><a href='DownloadFile?file= " + str + " '> " + str + " </a></li> " );
}
}
%>
</ ul >
</ fieldset >
<!-- enctype属性为表单定义了MIME编码方式,上传文件的表单enctype属性必须如此设置 -->
< form method ="post" action ="UploadFile" enctype ="multipart/form-data" >
< p >< input type ="text" name ="fileIntro" value ="" /> 文件介绍 </ p >
< p >< input type ="file" name ="myfile1" value ="浏览文件" /></ p >
< p >< input type ="submit" value ="上传" /></ p >
</ form >
</ div >....
.... < div id ="content" >
< fieldset >< legend > 下載列表 </ legend >
< ul >
<%
List < String > downloadList = (List < String > )request.getAttribute( " downloadList " );
if (downloadList! = null ){
for ( String str:downloadList){
out.print( " <li><a href='DownloadFile?file= " + str + " '> " + str + " </a></li> " );
}
}
%>
</ ul >
</ fieldset >
<!-- enctype属性为表单定义了MIME编码方式,上传文件的表单enctype属性必须如此设置 -->
< form method ="post" action ="UploadFile" enctype ="multipart/form-data" >
< p >< input type ="text" name ="fileIntro" value ="" /> 文件介绍 </ p >
< p >< input type ="file" name ="myfile1" value ="浏览文件" /></ p >
< p >< input type ="submit" value ="上传" /></ p >
</ form >
</ div >....
在上传表单中,既有普通文本域也有文件上传域,注意在Servlet中取它们和平常的做法不同:
Servlet代码:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->package
com.sitinspring.action;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.sitinspring.util.UploadUtil;
/**
* 用于文件上传处理的Servlet
* @author sitinspring
*
* @date 2008-2-12
*/
public class UploadFileServlet extends HttpServlet {
private static final long serialVersionUID = 56890894234786L ;
@SuppressWarnings( " unchecked " )
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
request.setCharacterEncoding( " UTF-8 " );
// 文件上傳部分
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart == true ) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 得到所有的表单域,它们目前都被当作FileItem
List < FileItem > fileItems = upload.parseRequest(request);
Iterator < FileItem > iter = fileItems.iterator();
// 依次处理每个表单域
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()){
// 如果item是正常的表单域
String name = item.getFieldName();
String value = item.getString();
System.out.print( " 表单域名为: " + name + " 表单域值为: " + value);
}
else {
// 如果item是文件上传表单域
// 获得文件名及路径
String fileName = item.getName();
if (fileName != null ) {
File fullFile = new File(item.getName());
// 如果文件存在则上传
if (fullFile.exists()){
File fileOnServer = new File(UploadUtil.getUploadPath(),
fullFile.getName());
item.write(fileOnServer);
System.out.println( " 文件 " + fileOnServer.getName() + " 上传成功 " );
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println( " the enctype must be multipart/form-data " );
}
// 取得服务器中已有文件的下載列表
List < String > fileListInServer = new ArrayList < String > ();
File dir = new File(UploadUtil.getUploadPath());
String[] children = dir.list();
if (children != null ) {
for ( int i = 0 ; i < children.length; i ++ ) {
fileListInServer.add(children[i]);
}
}
request.setAttribute( " downloadList " , fileListInServer);
// 跳回原頁面
RequestDispatcher dispatcher = request
.getRequestDispatcher( " /web/page/uploadtoserver.jsp " );
dispatcher.forward(request, response);
return ;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
doPost(request, response);
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.sitinspring.util.UploadUtil;
/**
* 用于文件上传处理的Servlet
* @author sitinspring
*
* @date 2008-2-12
*/
public class UploadFileServlet extends HttpServlet {
private static final long serialVersionUID = 56890894234786L ;
@SuppressWarnings( " unchecked " )
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
request.setCharacterEncoding( " UTF-8 " );
// 文件上傳部分
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart == true ) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 得到所有的表单域,它们目前都被当作FileItem
List < FileItem > fileItems = upload.parseRequest(request);
Iterator < FileItem > iter = fileItems.iterator();
// 依次处理每个表单域
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()){
// 如果item是正常的表单域
String name = item.getFieldName();
String value = item.getString();
System.out.print( " 表单域名为: " + name + " 表单域值为: " + value);
}
else {
// 如果item是文件上传表单域
// 获得文件名及路径
String fileName = item.getName();
if (fileName != null ) {
File fullFile = new File(item.getName());
// 如果文件存在则上传
if (fullFile.exists()){
File fileOnServer = new File(UploadUtil.getUploadPath(),
fullFile.getName());
item.write(fileOnServer);
System.out.println( " 文件 " + fileOnServer.getName() + " 上传成功 " );
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println( " the enctype must be multipart/form-data " );
}
// 取得服务器中已有文件的下載列表
List < String > fileListInServer = new ArrayList < String > ();
File dir = new File(UploadUtil.getUploadPath());
String[] children = dir.list();
if (children != null ) {
for ( int i = 0 ; i < children.length; i ++ ) {
fileListInServer.add(children[i]);
}
}
request.setAttribute( " downloadList " , fileListInServer);
// 跳回原頁面
RequestDispatcher dispatcher = request
.getRequestDispatcher( " /web/page/uploadtoserver.jsp " );
dispatcher.forward(request, response);
return ;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
doPost(request, response);
}
}
从上面的代码可以看出,无论是否文件上传表单域都被当成了FileItem来处理,要区别开来使用isFormField()方法即可,返回真是常规表单域,返回假则是文件上传表单域。
2.多个文件上传到服务器端。
这里采用JS动态生成几个文件上传表单域即可,Servlet无需改变。
多文件上传页面代码如下:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><%
@ page contentType
=
"
text/html; charset=UTF-8
"
%>
<% @page language = " java " import = " java.util.List " %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< html >
< head >
< title > 上传多個文件到服务器 </ title >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
< link rel ="stylesheet" rev ="stylesheet" href ="web/css/style.css"
type ="text/css" />
</ head >
< body >
< div id ="bodyDiv" >
< div id ="header" >
< jsp:include page ="/web/page/branch/header.jsp" />
</ div >
< div id ="sidebar" >
< jsp:include page ="/web/page/branch/sidebar.jsp" />
</ div >
< div id ="content" >
< fieldset >< legend > 下載列表 </ legend >
< ul >
<%
List < String > downloadList = (List < String > )request.getAttribute( " downloadList " );
if (downloadList! = null ){
for ( String str:downloadList){
out.print( " <li><a href='DownloadFile?file= " + str + " '> " + str + " </a></li> " );
}
}
%>
</ ul >
</ fieldset >
<!-- enctype属性为表单定义了MIME编码方式,上传文件的表单enctype属性必须如此设置 -->
< form name ="uploadForm" method ="post" action ="UploadFile" enctype ="multipart/form-data" >
< p >< input type ="button" value ="增加上传按钮" onclick ="addUploadButton()" /></ p >
< p >< input type ="file" name ="myfile1" value ="浏览文件" /></ p >
< p >< input type ="submit" value ="上传" /></ p >
</ form >
</ div >
< div id ="footer" >
< jsp:include page ="/web/page/branch/footer.jsp" />
</ div >
</ div >
</ body >
<% @page language = " java " import = " java.util.List " %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< html >
< head >
< title > 上传多個文件到服务器 </ title >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
< link rel ="stylesheet" rev ="stylesheet" href ="web/css/style.css"
type ="text/css" />
</ head >
< body >
< div id ="bodyDiv" >
< div id ="header" >
< jsp:include page ="/web/page/branch/header.jsp" />
</ div >
< div id ="sidebar" >
< jsp:include page ="/web/page/branch/sidebar.jsp" />
</ div >
< div id ="content" >
< fieldset >< legend > 下載列表 </ legend >
< ul >
<%
List < String > downloadList = (List < String > )request.getAttribute( " downloadList " );
if (downloadList! = null ){
for ( String str:downloadList){
out.print( " <li><a href='DownloadFile?file= " + str + " '> " + str + " </a></li> " );
}
}
%>
</ ul >
</ fieldset >
<!-- enctype属性为表单定义了MIME编码方式,上传文件的表单enctype属性必须如此设置 -->
< form name ="uploadForm" method ="post" action ="UploadFile" enctype ="multipart/form-data" >
< p >< input type ="button" value ="增加上传按钮" onclick ="addUploadButton()" /></ p >
< p >< input type ="file" name ="myfile1" value ="浏览文件" /></ p >
< p >< input type ="submit" value ="上传" /></ p >
</ form >
</ div >
< div id ="footer" >
< jsp:include page ="/web/page/branch/footer.jsp" />
</ div >
</ div >
</ body >
JS代码:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><
script LANGUAGE
=
"
JavaScript
"
>
<!--
var count = 1 ;
function addUploadButton(){
// 按ID找到FOrm
var uploadForm = document.getElementById( " uploadForm " );
// 创建P元素
var pNode = document.createElement( " p " );
// 累加Count以观察次数
count = count + 1 ;
pNode.innerHTML = " <input type='file' name='myfile " + count + " ' value='浏览文件'/> " ;
// 将P元素添加到body中
uploadForm.appendChild(pNode);
}
// -->
</ script >
</ html >
<!--
var count = 1 ;
function addUploadButton(){
// 按ID找到FOrm
var uploadForm = document.getElementById( " uploadForm " );
// 创建P元素
var pNode = document.createElement( " p " );
// 累加Count以观察次数
count = count + 1 ;
pNode.innerHTML = " <input type='file' name='myfile " + count + " ' value='浏览文件'/> " ;
// 将P元素添加到body中
uploadForm.appendChild(pNode);
}
// -->
</ script >
</ html >
评论
3 楼
眼镜蛇
2012-04-18
IE下可以使用,Firefox下不行,这是怎么回事
2 楼
眼镜蛇
2012-04-18
不知怎么回事,后台不报错,前台会报 Server (IO) Error。
1 楼
眼镜蛇
2012-04-18
Server (IO) Error
发表评论
-
Java文件路径(getResource)
2014-01-07 11:30 1031Class.getResource("" ... -
java随记
2013-04-27 14:41 949ThreadLocal是为解决多线程程序的并发问题而提出的 ... -
JAVA内存使用--如何计算一个Java对象占用的字节数
2013-02-02 22:45 1993转载:http://blog.csdn.net ... -
一些得到classpath和当前类的绝对路径的方法
2013-02-01 14:54 1347一些得到classpath和当前类的绝对路径的一些方 ... -
位操作的学习总结
2012-10-09 10:18 1223^ 异或 相同为0,相异为1 & 与 ... -
深入研究java.lang.Class类
2012-08-15 11:35 2053http://winsystem.ctocio.com ... -
Jetty嵌入式开发提供WEB服务
2012-07-03 14:27 2365在Java开发的Project项目 ... -
深入Tomcat:JNDI在TOMCAT中的应用
2011-11-19 17:20 2143JNDI在TOMCAT中的应用 在J2EE应用中, ... -
java文件下载时文件名在ie和firefox下面表现不一致问题
2010-12-29 15:52 2213首先文件名是是以utf-8编码保存在数据库中,文件名暂定为&q ... -
Java反射学习
2010-06-03 14:22 1766全文摘抄于:http://iwtxokhtd.iteye.co ... -
java定时器的使用(Timer
2010-05-19 10:11 1588转载:http://www.cnblogs.com/wyqto ... -
Java中四种XML解析技术
2009-04-14 14:10 910原文出自:XXXX(忘记了 ...
相关推荐
5. **多文件上传**:Apache Commons FileUpload支持单个文件和多个文件的上传,可以通过`<input type="file" multiple>`在HTML表单中实现。 在压缩包中,除了`commons-fileupload-1.3.3-bin`外,还包含了一个`...
本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...
5. **SizeLimitExceededException** 和 **FileSizeLimitExceededException**: 这两个异常分别用于指示整个请求的大小或单个文件大小超过了设定的限制,帮助开发者实施文件大小的安全控制。 使用Apache Commons ...
总的来说,`commons-fileupload-1.1.1.jar` 和 `commons-io-1.2.jar` 是Java Web开发中实现文件上传功能不可或缺的工具,它们提供了强大且灵活的文件上传处理能力。结合使用这两个库,开发者可以轻松地在Java应用...
它不仅支持单个文件的上传,还支持多个文件同时上传。此外,FileUpload库还提供了处理上传文件大小限制、内存溢出预防等实用功能。 这两个库通常一起使用,以实现完整的文件上传功能。例如,当用户在Web表单中选择...
【描述】提到的"使用commons-fileupload实现单个和多个文件上传"意味着这个示例将展示如何通过这个库来接收用户通过表单提交的文件。FileUpload库提供了一套接口和类,使得处理复杂的文件上传过程变得简单。它能够...
5. **安全性**:FileUpload库允许开发者设置安全策略,例如限制单个文件和总上传大小、验证文件扩展名,以防止恶意文件上传。 6. **API使用**:使用FileUpload库通常涉及创建一个`ServletFileUpload`实例,然后使用...
这个版本的文件包含了所有实现文件上传功能所需的类和接口,例如`DiskFileItemFactory`用于创建文件项实例,`FileUpload`类则负责解析请求并处理文件上传。 具体使用步骤如下: 1. **配置环境**:在Web应用的lib...
4. **StreamUtils**: 流的控制和操作,如合并多个流,读取全部内容等。 5. **CharsetUtils**: 字符集转换工具,支持多种字符编码。 结合这两个库,开发者可以在Java环境中方便地处理Web表单文件上传,同时进行复杂...
Apache Commons FileUpload 1.3.3版本的使用,不仅可以简化Java应用程序的文件上传实现,还能提高上传的稳定性和安全性。通过深入了解和熟练运用,开发者可以更高效地处理各种文件上传场景,提升应用的功能性和用户...
总的来说,Apache Commons FileUpload库是Java Web开发中不可或缺的工具,它极大地简化了文件上传功能的实现,让开发者可以更专注于业务逻辑的开发,而不是底层的细节处理。通过熟练掌握这个库,开发者能够创建更...
7. **多文件上传**:除了支持单个文件上传,FileUpload还允许用户一次上传多个文件。开发者可以通过编程方式轻松地处理这些文件数组。 8. **与Servlet容器集成**:由于其基于Servlet API,Apache Commons ...
总结来说,Apache Commons FileUpload是Java Web开发中处理文件上传不可或缺的工具,它的强大功能和灵活性使得开发者能够轻松处理各种复杂的文件上传需求。通过学习和使用这个库,开发者可以构建安全、高效的文件...
7. **多线程支持**:在高并发环境中,FileUpload库支持多线程处理,可以同时处理多个上传请求,提高了服务的响应速度。 8. **国际化与本地化**:尽管源码未明确提及,但作为成熟的Apache项目,FileUpload库很可能...
它提供了处理HTTP请求中多部分/表单数据的能力,使得开发者可以方便地实现文件上传功能。下面我们将详细探讨这个组件的原理、使用方法以及其在实际开发中的应用。 Apache Commons FileUpload是Apache软件基金会的一...
总的来说,Apache Commons FileUpload 和 Commons IO 是处理 Java Web 应用中文件上传和管理的重要工具,它们简化了原本复杂的多部分数据解析和文件操作,提高了开发效率和代码的可读性。在实际应用中,应根据需求...
- 支持多个文件同时上传。 - 提供了API来限制上传文件的大小、类型等。 - 可以方便地获取文件名、文件大小等信息。 - 支持文件的保存和临时存储。 - **应用场景**: - Web应用中的文件上传功能。 - 在线文档...
标题和描述提到的“commons-fileupload_所需的两个jar文件”指的是Apache Commons FileUpload库中的核心组件,通常包括`commons-fileupload.jar`和`commons-io.jar`这两个文件。 **1. `commons-fileupload.jar`:** ...
这个"commons-fileupload上传和下载例子.zip"压缩包包含了使用Apache Commons FileUpload进行文件上传和下载的示例代码,可以帮助我们深入理解这一功能的实现。 Apache Commons FileUpload是Apache软件基金会的一个...