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

(转)常用JSP文件上传,下载的一些方法

 
阅读更多
文件上传在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>
总之这三种方法各有千秋,用时可按实际情况进行选择。
分享到:
评论

相关推荐

    JspUpload JSP文件上传下载助手 完整版 Beta V1.0 附源码

    JspUpload JSP文件上传下载助手 正式版 修改了部分BUG 增加了配置文件web.xml 添加了156中常用的Mime类型.用户不需要配置Mime类型,增加配置文件即可.附源码!自动匹配Mime类型!

    JSP 实现文件上传功能

    本代码主要应用的是jsp技术,而实现的文件上传功能,这个功能也是比较常见的,也是比较常用的,更是在网络中比较流行的。 技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。JSP技术的设计目的是...

    jsp上传文件的组件

    jsp上传文件必备组件,经本人测试完全可以使用

    JSP上传、下载文件示例

    比较常用的在jsp中实现文件上传及文件下载的代码示例

    梁建武<JSP程序设计实用教程>之第八章 JSP与文件操作

    无论是用JSP技术,还是ASP、PHP技术实现的...本章首先介绍File对象和一些常用的输入输出流,然后介绍了实现多文件上传的两种方式。最后详细介绍了可以简单实现上传下载功能的JspSmartUpload组件,并通过实例加以说明。

    JSP上传文件方法.txet

    常用的JSP上传的代码,里面有例子,可以看看

    JSP实用技巧集合,jsp编程的一些小技巧总结

    50. 使用SmartUpload实现文件上传? 51. 使用iReport和Jasperreport开发报表? 52. 使用iText生成PDF? 53. 制作图片水印? 54. 在页面中屏蔽键盘功能键? 55. 禁止用户复制网页内容? 56. 实现不在地址拦中显示当前...

    web开发中文件上传的各种方法

    收集的web开发中文件上传的各种方法,包含源码。涉及到jsp,ajax,spring,struts,Smart Upload,webbUpload大文件上传和SWFuploadJava 多文件上传

    文件上传事例(支持各种格式)

    jsp文件上传事例,可以上传图片、文本等多种文件 在不用控件的情况下,可以考虑一下用它

    重要的JSP代码集合(包括文件上传,下载,分页,数据库连接,验证码等)

    收集了常用的代码集合,很实用的哦!包括文件的上传,下载,分页,验证码等等!反正很实用!

    Jsp File Browser

    国外著名的开源JSP文件管理器,历史悠久,功能强大,功能除了常用的建立文件夹,复制,删除文件等等之外,还包括在线浏览多种格式文件(JPG,FLASH,MP3...),在线编辑文本,单个或多文件下载为一个ZIP,调用服务器CMD,还提供...

    jsp网络编程从基础到实践

    第6章 JSP文件操作 实例28 File类常用方法示例 实例29 列出目录下所有的文件和文件夹 实例30 利用字节流读取文件中的内容 实例31 利用字节流把内容写入文件 实例32 用字符输入流读取文件 实例33 用字符输出流...

    jspsmart.jar包及帮助文档

    只所以提供这个类,是因为对于文件上传表单,通过request对象无法获得表单项的值,必须通过jspSmartUpload组件提供的Request对象来获取。该类提供如下方法: 1、getParameter 作用:获取指定参数之值。当参数不...

    JSP网络编程从基础到实践的实例代码

    第6章 JSP文件操作 实例28 File类常用方法示例 实例29 列出目录下所有的文件和文件夹 实例30 利用字节流读取文件中的内容 实例31 利用字节流把内容写入文件 实例32 用字符输入流读取文件 实例33 用字符输出流...

    jsp编程技巧集锦

    使用SmartUpload实现文件上传? 51. 使用iReport和Jasperreport开发报表? 52. 使用iText生成PDF? 53. 制作图片水印? 54. 在页面中屏蔽键盘功能键? 55. 禁止用户复制网页内容? 56. 实现不在...

    JSP网络编程从基础到实践

    实例20 request常用方法的应用 实例21 获得表单数据 实例22 页面重定向程序示例 实例23 定时刷新页面程序示例 实例24 记住会话的用户名 实例25 猜字母游戏 实例26 网站计数器 实例27 用...

    jsp上传图片代码

    关于在jsp页面上传图片的代码, Apache commons-fileupload是一个很好的文件上传工具,最近使用commons-fileupload实现了图片的上传及显示,可将图片保存在指定的文件夹中,也可以将图片存放在数据库,并支持四种常用...

    文件上传与下载用的jar包(commons-fileupload-1.2.1 commons-io-1.4 jspsmartupload jspsmart_zh_CN)

    里面包含了常用的上传用的commons-fileupload-1.2.1和commons-io-1.4以及下载用的jspsmartupload和有汉语情况时用到的jspsmart_zh_CN

    教学、学习必备:jsp教案

    第6章 JSP文件操作 142 6.1获取文件信息 142 6.2创建与删除文件路径 145 6.3读写文件 147 6.3.2 JSP读取文件 149 6.3.3按行读取文件 152 6.3.4写文件 155 6.4 综合实例 158 6.5文件上传 161 6.6文件下载 166 第7章...

    JSP网络编程从基础到实践 实例代码

    第6章 JSP文件操作 实例28 File类常用方法示例 实例29 列出目录下所有的文件和文件夹 实例30 利用字节流读取文件中的内容 实例31 利用字节流把内容写入文件 实例32 用字符输入流读取文件 实例33 用字符输出流...

Global site tag (gtag.js) - Google Analytics