对于实现文件上传功能来说,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;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjavax.servlet.RequestDispatcher;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileItemFactory;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importcom.sitinspring.util.UploadUtil;
/**
*用于文件上传处理的Servlet
*@authorsitinspring
*
*@date2008-2-12
*/
publicclassUploadFileServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=56890894234786L;
@SuppressWarnings("unchecked")
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,java.io.IOException{
request.setCharacterEncoding("UTF-8");
//文件上傳部分
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
if(isMultipart==true){
try{
FileItemFactoryfactory=newDiskFileItemFactory();
ServletFileUploadupload=newServletFileUpload(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=newFile(item.getName());
//如果文件存在则上传
if(fullFile.exists()){
FilefileOnServer=newFile(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=newFile(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;
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,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>
分享到:
相关推荐
泛微OA sysinterface/codeEdit.jsp 页面任意文件上传 WooYun-2015-0155705漏洞描述泛微OA sysinterface
泛微OA sysinterface/codeEdit.jsp 页面任意文件上传 WooYun-2015-0155705漏洞描述泛微OA sysinterface
总的来说,"struts实现任意多文件上传实例"是一个实用的示例,可以帮助开发者了解和掌握在Struts中进行多文件上传的完整流程。通过学习这个实例,你可以更深入地理解Struts框架和文件上传的处理方式。
帆软 V9 任意文件覆盖文件上传漏洞描述帆软 V9 存在任意文件覆盖,导致攻击者可以任意文件上传漏洞影响帆软 V9漏洞复现。
泛微OA9前台任意文件上传漏洞位于: /page/exportImport/uploadOperation.jsp文件中Jsp流程大概是:判断请求是否是mult
"纯jsp处理文件上存"是指完全通过JavaServer Pages (JSP)技术来实现文件上传的功能,不依赖其他如Servlet或第三方库如Apache Commons FileUpload。下面将详细解释这一知识点。 首先,我们需要理解JSP的基本原理。...
(7)支持多文件上传; (8)具体效果请看http://blog.csdn.net/hbccgg/archive/2011/04/29/6371080.aspx (9)压缩文件为Eclipse源文件,请发布到Web服务器上运行 (10)在Tomcat7.0环境开发。若要支持Tomcat6.0...
本PDF文档介绍了一种使用JSP实现文件上传和下载的方法,下面我们将深入探讨相关技术。 1. **文件上传** - **多文件上传**:通过HTML表单,可以允许用户选择多个文件进行上传。通常,`<input type="file" multiple>...
文件上传漏洞是Web应用程序中常见的一种安全缺陷,它允许攻击者上传任意文件到服务器,通常这些文件可能是恶意脚本或代码。一旦文件被成功上传,攻击者可能通过执行这些文件来获取服务器权限、篡改网站内容,甚至...
这个框架主要针对JSP(JavaServer Pages)和Servlet开发者,使得在Web应用中处理文件变得更加直观和高效。 要使用JSpritz Smart进行文件下载,首先需要确保你的项目已经包含了JSpritz Smart的库。这通常通过Maven或...
这个“JSP编程小技巧”压缩包文件包含了关于JSP开发的一些实用技巧,如文件上传、图片验证码以及JSP标准动作等常见功能的实现。以下是对这些知识点的详细说明: 1. **文件上传**: 文件上传是Web应用中常见的功能...
Struts通过`Commons FileUpload`库实现了文件上传。首先,你需要在项目中引入`commons-fileupload`和`commons-io`这两个依赖库。然后,在Struts的Action类中创建一个`File`类型的属性,对应于用户上传的文件。在表单...
2. **上传程序**:这个程序的核心在于实现了JSP文件上传功能。JSP(JavaServer Pages)是一种动态网页技术,能够将HTML、CSS、JavaScript与Java代码结合,生成动态网页。这里的上传程序利用了JSP的内置对象和Java ...
本教程将详细介绍如何在Struts中实现无中文乱码的文件上传与下载,并涵盖任意数量的文件上传。 首先,解决中文乱码问题的关键在于配置正确的字符编码。在Struts的配置文件`struts-config.xml`中,你需要为...
4. 采用全新设计IO组件,上传任意文件大小时始终占用128KB内存。 5. 支持文件及文件夹拖拽上传功能。 6. 支持文件批量上传。 7. 支持文件夹上传。 8. 基于标准HTTP协议。 9. 免费提供JavaScript SDK包,方便您将插件...
部署时,将应用打包成WAR文件,上传至支持Servlet和JSP的Web服务器(如Tomcat)。 以上就是基于MySQL、Servlet和JSP的简易CRM实现所涉及的关键知识点。理解并掌握这些技术,可以为开发更复杂的Web应用打下坚实基础...
1. **前台异步上传**:使用jQuery的`ajaxFileUpload.js`插件进行异步上传,该插件简化了文件上传的过程,无需刷新页面即可完成上传动作。 2. **后端处理**:后端接收到上传的图片数据后,将其写入服务器上的临时...
JSpsmart是一款针对Java Web开发的文件上传和下载组件,它提供了简单易用的API,可以帮助开发者快速实现文件的上传和下载功能。这个组件特别适合那些需要处理大量文件交互的Web应用程序,如内容管理系统、论坛、博客...