首页 > 其他分享 >常用JSP文件上传,下载的一些方法

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

时间:2023-09-14 19:13:07浏览次数:47  
标签:文件 upload su JSP file 上传 下载 out

文件上传在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>
总之这三种方法各有千秋,用时可按实际情况进行选择。

 

参考文章:http://blog.ncmem.com/wordpress/2023/09/14/%e5%b8%b8%e7%94%a8jsp%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8b%e8%bd%bd%e7%9a%84%e4%b8%80%e4%ba%9b%e6%96%b9%e6%b3%95/

欢迎入群一起讨论

 

 

标签:文件,upload,su,JSP,file,上传,下载,out
From: https://www.cnblogs.com/songsu/p/17703206.html

相关文章

  • ⛳ 将本地已有的项目上传到 git 仓库
    ⛳将本地已有的项目上传到git仓库有两种方法: 一、克隆+拷贝 二、强行合并两个仓库......
  • Linux系统 下载并配置JDK8
    访问Oracle的官网:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html  选择:Linuxx64CompressedArchive(对应64位操作系统)。     3.下载时需要登录Oracle账户,没有可以注册一个 注册不了的可以从百度网盘下载:链接:https://pan......
  • huggingface.co,模型文件下载不下来的解决办法
    原来是文件名用错了。记住:必须用下面这个......
  • js:上传图片,通过file对象或blob对象获取用于显示的url,获取图片的base64编码;限制文件类
    1//URL.createObjectUrl(file):同步执行;创建一个指向file/blob对象的url,可用于元素的src/href属性23//fileReader.readAsDataURL():异步执行;读取file/blob对象的内容,result属性将返回一个包含data:URL格式的base64字符串45//fileReader.readAsDataURL()是异步的,所......
  • JSP页面实现上传下载
     本文使用的是smartupload工具实现文件的上传下载:工具:1、Eclipse2、jspsmart.jar(百度搜索jspsmartupload.jar下载) JSP页面: 1<%--上传--%> 2<formaction="upload"method="post"enctype="multipart/form-data"> 3<inputtype="file&quo......
  • photoshop下载中文版-ps最新版安装包 各个版本下载
    AdobePhotoshop是由Adobe公司推出的一款专门用来处理图像的图像处理工具,用户可以使用这款工具针对图像进行各种修饰、美化已达到自己想要的效果。AdobePhotoshopCS5中文版是该系列软件当中最为经典的一代版本,使用人数最多,想要制作出更为精美的图片软件地址:看置顶贴AdobePhotosh......
  • ps下载电脑版-photoshop下载-ps软件下载 各个版本下载
    AdobePhotoshop2021官方官方版是一款非常好用的图像处理软件。这款软件可以帮助用户快速的美化图片。软件为用户提供了大量的免费处理图片的工具,而且这款软件经过大神的优化,直接安装就可以使用,无需单独。有需要的小伙伴快来下载吧。软件地址:看置顶贴Photoshop2021功能介绍1、神经......
  • photoshop电脑版下载-ps官方版下载-photoshop下载 各个版本下载
    AdobePhotoshopCC中文版除去PhotoshopCS6中所包涵的功能,PhotoshopCC还新增相机防抖动、CameraRAW功能改进、图像提升采样、属性面板改进、Behance集成等等功能。软件地址:看置顶贴安装教程1、在本站下载并解压,双击Set-up.exe运行安装,如图所示,保持默认位置进行安装,或者点击更改位......
  • ps官方软件PhotoshopPS软件各个版本下载 各个版本下载
    AdobePhotoshopCS6中文版是Adobe公司旗下最为出名的图像处理软件。AdobePhotoshopCS6简体中文版是较为重大的一次版本更新,整合Adobe专有的Mercury图像引擎,提供了强悍的图片编辑能力,让用户更加轻松方便的进行抠图操作,深受广大平面设计人员和电脑美术爱好者的喜爱!软件地址:看置顶......
  • photoshop最新版下载PS2023最新版 各个版本下载
    版本对比PhotoshopCS6和PhotoshopCS6Extended的区别1.PScs6extended是拓展版,PScs6是普通版。2.PhotoshopCS6标准版适合摄影师以及印刷设计人员使用。PhotoshopCS6扩展版除了包含标准版的功能外还添加了用于创建和编辑3D和基于动画的内容的突破性工具,适合视频专业人士、......