文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,下面我介绍几种有关文件上传组件。
一. 基于org.apache.struts.upload.FormFile的文件上传。这种方法相对比较简单。原理是在Actionform中定义一个FormFile类型的属性file,这个类型是struts所提供的包中的对象——“org.apache.struts.upload.FormFile”,并在jsp中加入html:file标签,当提交表单后,该标签会把用户所选择上传的文件的放入file中。
在action中加入如下语句进行上传:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
FileUploadActionForm upload=( FileUploadActionForm)form;
FormFile ff= upload.getFile();//取得上传的文件
String filesize=Integer.toString(ff.getFileSize())+"bytes";//获取文件大小
String dir=request.getRealPath("/upload");//上传到指定的upload包中
InputStream in=ff.getInputStream();//把文件读入
OutputStream out=new FileOutputStream(dir+"/"+ ff.getFileName()); //建立一个上传文件的输出流
out.write(); //将文件写入服务器
out.close();
in.close();
return mapping.findForward(SUCCESS);
}
剩下的就是配置struts-config.xml中的ActionForm与Action对应了,在这里我就不详说了。但是这种方法只限于在struts环境中使用,因此它的通用性并不强。
二. 基于commons-fileupload的文件上传common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。用该组件可实现一次上传一个或多个文件,并可限制文件大小。
下面举一个例子:
新建一个servlet: upload.java用于文件上传:
public class upload extends httpservlet {
private string uploadpath = "c:\\upload\\"; / 上传文件的目录
private string temppath = "c:\\upload\\tmp\\"; / 临时文件目录
public void dopost(httpservletrequest request,
httpservletresponse response)
throws ioexception, servletexception
{
}
}
在dopost()方法中,当servlet收到浏览器发出的post请求后,实现文件上传。以下是示例代码:
public void dopost(httpservletrequest request,
httpservletresponse response)
throws ioexception, servletexception
{
try {
diskfileupload fu = new diskfileupload();
/ /设置最大文件尺寸,这里是4mb
fu.setsizemax(4194304);
// 设置缓冲区大小,这里是4kb
fu.setsizethreshold(4096);
/ /设置临时目录:
fu.setrepositorypath(temppath);
/ /得到所有的文件:
list fileitems = fu.parserequest(request);
iterator i = fileitems.iterator();
// 依次处理每一个文件:
while(i.hasnext()) {
fileitem fi = (fileitem)i.next();
/ /获得文件名,这个文件名包括路径:
string filename = fi.getname();
// 在这里可以记录用户和文件信息
/ /...
/ /写入文件,暂定文件名为a.txt,可以从filename中提取文件名:
fi.write(new file(uploadpath + "a.txt"));
}
}
catch(exception e) {
/ /可以跳转出错页面
}
}
如果要在配置文件中读取指定的上传文件夹,可以在init()方法中执行:
public void init() throws servletexception {
uploadpath = ....
temppath = ....
/ /文件夹不存在就自动创建:
if(!new file(uploadpath).isdirectory())
new file(uploadpath).mkdirs();
if(!new file(temppath).isdirectory())
new file(temppath).mkdirs();
编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。
配置servlet,用记事本打开tomcat\webapps\你的webapp\web-inf\web.xml,没有的话新建一个。
典型配置如下:
<@xml version="1.0" encoding="iso-8859-1"@>
<!doctype web-app
public "-/sun microsystems, inc./dtd web application 2.3/en"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>upload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/fileupload</url-pattern>
</servlet-mapping>
</web-app>
配置好servlet后,启动tomcat,写一个简单的html测试:
<form action="fileupload" method="post"
enctype="multipart/form-data" name="form1">
<input type="file" name="file">
<input type="submit" name="submit" value="upload">
</form>
注意action="fileupload"其中fileupload是配置servlet时指定的url-pattern。
这种方法的通用性相对比较好,可应用于包括struts在内的各种编程技术。
三. 基于jspSmartUpload的文件上传.jspSmartUpload是由www.jspsmart.com网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。
利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),
方便存取。能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。
下载灵活。仅写两行代码,就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下,都可以利用jspSmartUpload进行下载。
能将文件上传到数据库中,也能将数据库中的数据下载下来。这种功能针对的是MYSQL数据库.
对于上传文件的FORM表单,有两个要求:
1、METHOD应用POST,即METHOD="POST"。
2、增加属性:ENCTYPE="multipart/form-data"
下面是一个用于上传文件的FORM表单的例子:
<FORM METHOD="POST" ENCTYPE="multipart/form-data"
ACTION="/jspSmartUpload/upload.jsp">
<INPUT TYPE="FILE" NAME="MYFILE">
<INPUT TYPE="SUBMIT">
</FORM>
执行文件上传操作
<%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initialize(pageContext);
// 设定上传限制
// 1.限制每个上传文件的最大长度。
// su.setMaxFileSize(10000);
// 2.限制总上传数据的长度。
// su.setTotalMaxFileSize(20000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
// su.setAllowedFilesList("doc,txt");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
jsp,htm,html扩展名的文件和没有扩展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录
int count = su.save("/upload");
out.println(count+"个文件上传成功!<br>");
// 利用Request对象获取参数之值
out.println("TEST="+su.getRequest().getParameter("TEST")
+"<BR><BR>");
// 逐一提取上传文件信息,同时可保存文件。
for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
// 若文件不存在则继续
if (file.isMissing()) continue;
// 显示当前文件信息
out.println("<TABLE BORDER=1>");
out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
+ file.getFieldName() + "</TD></TR>");
out.println("<TR><TD>文件长度(Size)</TD><TD>" +
file.getSize() + "</TD></TR>");
out.println("<TR><TD>文件名(FileName)</TD><TD>"
+ file.getFileName() + "</TD></TR>");
out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>"
+ file.getFileExt() + "</TD></TR>");
out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
+ file.getFilePathName() + "</TD></TR>");
out.println("</TABLE><BR>");
// 将文件另存
// file.saveAs("/upload/" + myFile.getFileName());
// 另存到以WEB应用程序的根目录为文件根目录的目录下
// file.saveAs("/upload/" + myFile.getFileName(),su.SAVE_VIRTUAL);
// 另存到操作系统的根目录为文件根目录的目录下
// file.saveAs("c:\\temp\\" + myFile.getFileName(),su.SAVE_PHYSICAL);
}
%>
用这种方法并不用配置任何文件。只需在html/jsp文件中加入如下类似代码即可执行,
<FORM METHOD="POST"ACTION="jsp/do_upload.jsp"ENCTYPE="multipart/form-data">
<input type="FILE" name="FILE1" size="30">
<input type="submit" name="Submit" value="上传它!">
</FORM>
总之这三种方法各有千秋,用时可按实际情况进行选择。
分享到:
相关推荐
"JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。...JSP文件上传和下载是Web应用程序中常用的功能,需要注意文件上传和下载的安全性、性能和可扩展性。
【jsp文件上传下载】是一个常见的Web开发功能,用于在服务器端处理用户上传的文件并提供文件下载服务。在Java Web环境中,JSP(JavaServer Pages)是常用的动态网页技术,结合Servlet可以实现复杂的文件交互操作。 ...
总结,通过学习和掌握JSP与`SmartUpload`库的使用,开发者可以轻松构建起一套完善的文件上传下载系统,为用户提供安全、便捷的文件操作体验。在实际开发中,根据项目需求和安全规范进行适当调整和优化,确保系统的...
一、JSP文件上传 文件上传在Web应用中是非常常见的需求,例如用户注册时提交的头像、论坛中的附件等。在JSP中,我们通常会借助Servlet和表单来完成这一过程。首先,HTML表单需要设置`enctype="multipart/form-data...
以上是关于JSP文件上传的基本概念和实现步骤。在实际开发中,应结合具体需求,如文件存储策略、权限控制等,进行更深入的设计和实现。同时,随着技术的发展,现代Web框架如Spring Boot提供了更高级别的抽象,简化了...
JSP 实现文件上传 JSP 文件上传是指通过 JSP 语言...JSP 文件上传是一种常用的 web 应用程序功能,需要使用 Java 语言和相关的类库来实现。通过本文,我们可以了解到 JSP 文件上传的基本实现过程和需要注意的几点。
在Java Web开发中,JSP(JavaServer Pages)是一种常用的技术,用于创建动态网页。...总的来说,理解和掌握JSP中的文件上传与下载是Java Web开发中的基础技能,它们有助于实现更丰富的交互式功能,提高用户满意度。
综上所述,这个JSP文件上传下载实现涵盖了Web开发中的多个重要方面,包括客户端与服务器的交互、文件处理、字符编码以及代码复用。对于学习JSP和Web开发的初学者来说,这是一个很好的实践案例。
Jspsmart是由SmartUpload类组成的,这是一个开源的JSP文件上传解决方案,提供了易于使用的API来处理用户通过表单上传的文件。它能够处理大文件上传,防止内存溢出,并支持多文件同时上传。 SmartUpload的工作流程...
总结,JSP文件上传组件通常涉及JSP页面设计、Servlet处理以及第三方库如Apache Commons FileUpload的使用。理解这些知识点,开发者就能构建出健壮且安全的文件上传功能。在实际应用中,务必注意文件上传的安全性,...
在Java Web开发中,JSP(JavaServer Pages)和Servlet常用于构建动态网站,而文件上传和下载功能是其中常见的需求。本篇文章将深入探讨如何使用JSP和Java实现文件的上传与下载。 首先,我们需要了解文件上传的基本...
JspUpload JSP文件上传下载助手 正式版 修改了部分BUG 增加了配置文件web.xml 添加了156中常用的Mime类型.用户不需要配置Mime类型,增加配置文件即可.附源码!自动匹配Mime类型!
JSP文件上传和下载是常见的功能需求,特别是在构建具有交互性的Web应用时。本篇将深入探讨如何利用JSP实现文件的上传与下载。 首先,我们要了解文件上传的核心组件:Servlet和表单提交。在JSP中,通常不直接处理...
JSP SmartUpload是一个常用的Java库,专门用于处理文件上传任务,它简化了在JSP中实现文件上传的复杂性。本文将深入探讨JSP SmartUpload的工作原理、使用方法及其在实际项目中的应用。 1. **JSP SmartUpload简介** ...
文件上传是一个常用的需求,例如用户在网站上提交个人信息时可能需要上传头像或简历。以下将详细介绍如何使用JSP进行文件上传。 1. **HTML表单设计** 文件上传首先需要一个HTML表单来让用户选择要上传的文件。表单...
综上所述,JSP文件上传和下载涉及到Web开发的多个层面,包括HTTP协议理解、Servlet和JSP编程、数据库操作以及安全性和性能优化。通过熟练掌握这些知识点,开发者能够构建出功能完善且安全的文件管理系统。
2. **Apache Commons FileUpload**:提供处理文件上传的工具,包括common-fileupload.jar和common-io.jar。 3. **JSTL(JavaServer Pages Standard Tag Library)**:有时用于简化JSP页面的代码,尤其是处理表单和...
JSPSmartUpload 是一个在Java Web开发中常用的文件上传组件,它提供了方便的API来处理文件上传和下载的操作。在使用 JSPSmartUpload 时,可能会遇到一些常见问题,如中文文件名乱码以及如何防止重复下载导致积分多次...
在"上传下载源码.zip"中,可能包含了一个简单的JSP文件上传示例。该示例可能包括以下几个关键组件: 1. HTML表单:表单元素`<input type="file">`用于让用户选择要上传的文件。 2. JSP页面:接收表单提交,使用...
在这个"jsp文件上传案例5"中,我们将探讨如何使用JSP来实现文件上传功能,这对于任何需要用户提交文件的Web应用程序都是至关重要的。文件上传常用于图片分享、文档提交或任何形式的数据交换。 1. **文件上传原理**...