Struts2控制文件上传下载功能实例代码

  

之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个部分类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用。至于文件下载,Struts贯彻AOP思想,在下载之前提供对用户权限控制的API。

  

下面我们将详细介绍上传和下载的相关内容。

  

  

,,,,想要实现文件上传功能,页面的表单的方法属性必须被指定为post,还有enctype属性必须为多部分/格式,该值表示上传的内容将会以二进制的形式被上传到服务器,至于该属性的其他值的作用及他们之间的区别,请查看之前文章:servlet3.0新特性。下面给出表现层页面代码:

        & lt; body>   & lt;销售:形式method=" post " enctype=" multipart/格式”action="/上传”比;   & lt;销售:文件名称=皍file”标签=颁馈?比;   & lt;销售:提交价值=" https://www.yisu.com/zixun/上传”/比;   & lt;/s: form>   & lt;/body>      

实际上在Struts的文件上传中,它使用三个行动属性来描述被上传的文件.commons-fileupload-1.3.2.jar和commons-io-2.2.jar这两个包就是用于辅助表单上传的内容赋值到行动属性中,所以在使用Struts的文件上传之前应当先包含着两个包到项目中。下面给出上传对应的行动:

        公开课还是延伸ActionSupport {//封装的上传文件的文件内容   私人文件ufile;//封装的上传文件的文件名   私人字符串ufileFileName;//封装的上传文件的文件类型   私人字符串ufileContentType;   ....省去getter、setter方法      公共字符串execute()抛出IOException {   FileInputStream鳍=new FileInputStream (ufile);   FileOutputStream安全系数=new FileOutputStream (F: \ \ 360 \ \ " + ufileFileName);   byte[]新字节缓冲区=[1024];   int len;   而((len=fin.read(缓冲))在0){   fos.write(缓冲区,0,len);   }   返回成功;   }   }      

先不看执行方法,在该行动中,我们可以看到有三个属性.ufile封装了上传的文件的二进制内容,ufileFileName (xxxFileName)封装了该文件的文件名,ufileContentType (xxxContentType)封装了该文件的类型。他们的值是我们不必关心的,框架会根据表单上传的文件对他们进行赋值,只需要遵守他的命名规则即可。

  

执行方法主要是完成将上传的文件保存到硬盘上,代码也比较简单,读取属性ufile中的内容,写入磁盘指定位置。下面我们看看运行的结果截图:

  

 Struts2控制文件上传下载功能实例代码

  

 Struts2控制文件上传下载功能实例代码

  

至此我们就完成了对上传文件的获取保存,总体上看来,实际上还是使用了三个行动实例属性对上传文件相关信息的封装。一个属性封装的是该上传文件的二进制内容,一个属性封装该文件的文件名称,一个属性封装的是该文件的文件类型。实际上把控好这三个属性,基本可以完成对该上传文件的所有操作。下面我们看文件下载。

  

  

,,,,广义上的文件下载,其实可以使用的标签链接到对应资源完成对资源的下载,但是在浏览器中使用这种方式会导致浏览器直接打开该资源文件而非弹出下载框指定下载位置.Struts下载机制通过配置结果元素的类型属性为流来实现的。在类型为流的结果元素中可以配置一些参数,这些参数主要有以下一些:

  

contentType:指定被下载文件的文件类型

  

inputName:指定被下载文件的输入流入口

  

contentDisposition:指定下载文件的文件名

  

bufferSize:指定下载文件的缓冲大小

  

具体的应用我们从代码示例中体会:

     //直接访问的行动   & lt; body>   & lt; a href=" https://www.yisu.com/download " rel=巴獠縩ofollow”祝辞下载资源& lt;/a>   & lt;/body>   公开课DownloadFile延伸ActionSupport {   私人字符串inputPath;   公共空间setInputPath (String s) {   这一点。inputPath=s;   }   公共字符串getInputPath () {   返回this.inputPath;   }   公共InputStream getTarFile () {   返回ServletActionContext.getServletContext () .getResourceAsStream (inputPath);   }   @Override   公共字符串execute () {   返回成功;   }   }//下载的动作配置   & lt;动作名称=跋略亍眂lass=癕yPackage.DownloadFile”比;   & lt;参数name=" inputPath祝辞/m.jpg

Struts2控制文件上传下载功能实例代码