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

常用JSP文件上传,下载的一些方法
2010年04月03日
   文件上传在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,没有的话新建一个。
  典型配置如下:
  
  
  
  
  upload
  upload
  
  
  upload
  /fileupload
  
  
  配置好servlet后,启动tomcat,写一个简单的html测试:
  
  
  
  
  注意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表单的例子:
  
  
  
  
  执行文件上传操作
  上传初始化
  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+"个文件上传成功!
");
  // 利用Request对象获取参数之值
  out.println("TEST="+su.getRequest().getParameter("TEST")
  +"");
  // 逐一提取上传文件信息,同时可保存文件。
  for (int i=0;i");
  out.println("表单项名(FieldName)"
  + file.getFieldName() + "");
  out.println("文件长度(Size)" +
  file.getSize() + "");
  out.println("文件名(FileName)"
  + file.getFileName() + "");
  out.println("文件扩展名(FileExt)"
  + file.getFileExt() + "");
  out.println("文件全名(FilePathName)"
  + file.getFilePathName() + "");
  out.println("");
  // 将文件另存
  // 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文件中加入如下类似代码即可执行,
  
  
  上传它!">
  
  总之这三种方法各有千秋,用时可按实际情况进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值