`
foryougeljh
  • 浏览: 116416 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSP实现任意个文件上传

 
阅读更多

使用commons-fileupload实现单个和多个文件上传

对于实现文件上传功能来说,Commons-fileupload组件是一个不错的选择,本文使用它实现了单个文件及多个文件上传,这里将实现过程写出来与大家共享。

1.单个文件上传。
页面代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
....
<divid="content">
<fieldset><legend>下載列表</legend>
<ul>
<%
List
<String>downloadList=(List<String>)request.getAttribute("downloadList");

if(downloadList!=null){
for(Stringstr:downloadList){
out.print(
"<li><ahref='DownloadFile?file="+str+"'>"+str+"</a></li>");
}
}
%>
</ul>
</fieldset>

<!--enctype属性为表单定义了MIME编码方式,上传文件的表单enctype属性必须如此设置-->
<formmethod="post"action="UploadFile"enctype="multipart/form-data">
<p><inputtype="text"name="fileIntro"value=""/>文件介绍</p>
<p><inputtype="file"name="myfile1"value="浏览文件"/></p>
<p><inputtype="submit"value="上传"/></p>
</form>
</div>....

在上传表单中,既有普通文本域也有文件上传域,注意在Servlet中取它们和平常的做法不同:
Servlet代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packagecom.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
*
@authorsitinspring
*
*@date2008-2-12
*/

publicclassUploadFileServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=56890894234786L
;

@SuppressWarnings(
"unchecked"
)
publicvoid
doPost(HttpServletRequestrequest,HttpServletResponseresponse)
throws
ServletException,java.io.IOException{
request.setCharacterEncoding(
"UTF-8"
);

//文件上傳部分

booleanisMultipart=ServletFileUpload.isMultipartContent(request);

if(isMultipart==true
){
try
{
FileItemFactoryfactory
=new
DiskFileItemFactory();
ServletFileUploadupload
=new
ServletFileUpload(factory);

//得到所有的表单域,它们目前都被当作FileItem

List<FileItem>fileItems=upload.parseRequest(request);
Iterator
<FileItem>iter=
fileItems.iterator();

//依次处理每个表单域

while(iter.hasNext()){
FileItemitem
=
(FileItem)iter.next();

if
(item.isFormField()){
//如果item是正常的表单域

Stringname=item.getFieldName();
Stringvalue
=
item.getString();
System.out.print(
"表单域名为:"+name+"表单域值为:"+
value);
}
else
{
//
如果item是文件上传表单域

//获得文件名及路径

StringfileName=item.getName();
if(fileName!=null
){
FilefullFile
=new
File(item.getName());

//如果文件存在则上传

if(fullFile.exists()){
FilefileOnServer
=new
File(UploadUtil.getUploadPath(),
fullFile.getName());
item.write(fileOnServer);

System.out.println(
"文件"+fileOnServer.getName()+"上传成功"
);
}
}
}
}
}
catch
(Exceptione){
e.printStackTrace();
}
}
else
{
System.out.println(
"theenctypemustbemultipart/form-data"
);
}

//取得服务器中已有文件的下載列表

List<String>fileListInServer=newArrayList<String>();

Filedir
=new
File(UploadUtil.getUploadPath());
String[]children
=
dir.list();
if(children!=null
){
for(inti=0;i<children.length;i++
){
fileListInServer.add(children[i]);
}
}

request.setAttribute(
"downloadList"
,fileListInServer);

//跳回原頁面

RequestDispatcherdispatcher=request
.getRequestDispatcher(
"/web/page/uploadtoserver.jsp"
);
dispatcher.forward(request,response);
return
;
}

publicvoid
doGet(HttpServletRequestrequest,HttpServletResponseresponse)
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 /> --><%@pagecontentType="text/html;charset=UTF-8"%>
<%@pagelanguage="java"import="java.util.List"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<html>
<head>
<title>上传多個文件到服务器</title>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<linkrel="stylesheet"rev="stylesheet"href="web/css/style.css"
type
="text/css"/>
</head>

<body>
<divid="bodyDiv">
<divid="header">
<jsp:includepage="/web/page/branch/header.jsp"/>
</div>
<divid="sidebar">
<jsp:includepage="/web/page/branch/sidebar.jsp"/>
</div>
<divid="content">
<fieldset><legend>下載列表</legend>
<ul>
<%
List
<String>downloadList=(List<String>)request.getAttribute("downloadList");

if(downloadList!=null){
for(Stringstr:downloadList){
out.print(
"<li><ahref='DownloadFile?file="+str+"'>"+str+"</a></li>");
}
}
%>
</ul>
</fieldset>

<!--enctype属性为表单定义了MIME编码方式,上传文件的表单enctype属性必须如此设置-->
<formname="uploadForm"method="post"action="UploadFile"enctype="multipart/form-data">
<p><inputtype="button"value="增加上传按钮"onclick="addUploadButton()"/></p>
<p><inputtype="file"name="myfile1"value="浏览文件"/></p>
<p><inputtype="submit"value="上传"/></p>
</form>
</div>
<divid="footer">
<jsp:includepage="/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 /> --><scriptLANGUAGE="JavaScript">
<!--
varcount=1;

functionaddUploadButton(){
//按ID找到FOrm
varuploadForm=document.getElementById("uploadForm");

//创建P元素
varpNode=document.createElement("p");

//累加Count以观察次数
count=count+1;

pNode.innerHTML
="<inputtype='file'name='myfile"+count+"'value='浏览文件'/>";

//将P元素添加到body中
uploadForm.appendChild(pNode);
}

//-->
</script>
</html>

分享到:
评论

相关推荐

    saucer-man#wiki#泛微OA sysinterfacecodeEdit.jsp 页面任意文件上传1

    泛微OA sysinterface/codeEdit.jsp 页面任意文件上传 WooYun-2015-0155705漏洞描述泛微OA sysinterface

    EtMi832#PeiQi-WIKI-POC#泛微OA sysinterfacecodeEdit.jsp 页面任意文件上传1

    泛微OA sysinterface/codeEdit.jsp 页面任意文件上传 WooYun-2015-0155705漏洞描述泛微OA sysinterface

    struts实现任意多文件上传实例

    总的来说,"struts实现任意多文件上传实例"是一个实用的示例,可以帮助开发者了解和掌握在Struts中进行多文件上传的完整流程。通过学习这个实例,你可以更深入地理解Struts框架和文件上传的处理方式。

    Thinkergod#PeiQi-WIKI-POC#帆软 V9 任意文件覆盖文件上传1

    帆软 V9 任意文件覆盖文件上传漏洞描述帆软 V9 存在任意文件覆盖,导致攻击者可以任意文件上传漏洞影响帆软 V9漏洞复现。

    Silentsoul04#vulnerability-paper-1#泛微OA9前台任意文件上传1

    泛微OA9前台任意文件上传漏洞位于: /page/exportImport/uploadOperation.jsp文件中Jsp流程大概是:判断请求是否是mult

    纯jsp处理文件上存

    "纯jsp处理文件上存"是指完全通过JavaServer Pages (JSP)技术来实现文件上传的功能,不依赖其他如Servlet或第三方库如Apache Commons FileUpload。下面将详细解释这一知识点。 首先,我们需要理解JSP的基本原理。...

    纯JSP带进度条无刷新的多文件上传

    (7)支持多文件上传; (8)具体效果请看http://blog.csdn.net/hbccgg/archive/2011/04/29/6371080.aspx (9)压缩文件为Eclipse源文件,请发布到Web服务器上运行 (10)在Tomcat7.0环境开发。若要支持Tomcat6.0...

    jsp实现文件上传和下载(代码及说明).pdf

    本PDF文档介绍了一种使用JSP实现文件上传和下载的方法,下面我们将深入探讨相关技术。 1. **文件上传** - **多文件上传**:通过HTML表单,可以允许用户选择多个文件进行上传。通常,`&lt;input type="file" multiple&gt;...

    finecms-含有前台文件上传漏洞源码包.zip

    文件上传漏洞是Web应用程序中常见的一种安全缺陷,它允许攻击者上传任意文件到服务器,通常这些文件可能是恶意脚本或代码。一旦文件被成功上传,攻击者可能通过执行这些文件来获取服务器权限、篡改网站内容,甚至...

    使用jspsmart实现文件下载

    这个框架主要针对JSP(JavaServer Pages)和Servlet开发者,使得在Web应用中处理文件变得更加直观和高效。 要使用JSpritz Smart进行文件下载,首先需要确保你的项目已经包含了JSpritz Smart的库。这通常通过Maven或...

    JSP编程小技巧-已整理 (例:文件上传,图片验证码,JSP标准动作.....)

    这个“JSP编程小技巧”压缩包文件包含了关于JSP开发的一些实用技巧,如文件上传、图片验证码以及JSP标准动作等常见功能的实现。以下是对这些知识点的详细说明: 1. **文件上传**: 文件上传是Web应用中常见的功能...

    Struts实现任意文件的快速上传和下载

    Struts通过`Commons FileUpload`库实现了文件上传。首先,你需要在项目中引入`commons-fileupload`和`commons-io`这两个依赖库。然后,在Struts的Action类中创建一个`File`类型的属性,对应于用户上传的文件。在表单...

    jsp上传组件 上传程序

    2. **上传程序**:这个程序的核心在于实现了JSP文件上传功能。JSP(JavaServer Pages)是一种动态网页技术,能够将HTML、CSS、JavaScript与Java代码结合,生成动态网页。这里的上传程序利用了JSP的内置对象和Java ...

    无中文乱码的Struts上传下载(任意文件上传)

    本教程将详细介绍如何在Struts中实现无中文乱码的文件上传与下载,并涵盖任意数量的文件上传。 首先,解决中文乱码问题的关键在于配置正确的字符编码。在Struts的配置文件`struts-config.xml`中,你需要为...

    JSP大文件上传控件-access-utf8

    4. 采用全新设计IO组件,上传任意文件大小时始终占用128KB内存。 5. 支持文件及文件夹拖拽上传功能。 6. 支持文件批量上传。 7. 支持文件夹上传。 8. 基于标准HTTP协议。 9. 免费提供JavaScript SDK包,方便您将插件...

    mysql+servlet+jsp的简易crm实现

    部署时,将应用打包成WAR文件,上传至支持Servlet和JSP的Web服务器(如Tomcat)。 以上就是基于MySQL、Servlet和JSP的简易CRM实现所涉及的关键知识点。理解并掌握这些技术,可以为开发更复杂的Web应用打下坚实基础...

    JAVA_jsp任意浏览器的图片上传预览

    1. **前台异步上传**:使用jQuery的`ajaxFileUpload.js`插件进行异步上传,该插件简化了文件上传的过程,无需刷新页面即可完成上传动作。 2. **后端处理**:后端接收到上传的图片数据后,将其写入服务器上的临时...

    jspsmart下载上传源代码

    JSpsmart是一款针对Java Web开发的文件上传和下载组件,它提供了简单易用的API,可以帮助开发者快速实现文件的上传和下载功能。这个组件特别适合那些需要处理大量文件交互的Web应用程序,如内容管理系统、论坛、博客...

Global site tag (gtag.js) - Google Analytics