zoukankan      html  css  js  c++  java
  • Struts2 文件下载(中文处理方法以及控制下载文件名称和扩展名)

    Struts2的框架提供了现成的文件下载方式,大大简化了开发下载功能的便利性。网上的例子有很多,我把一些大家普遍比较关注的点,集中一下,给出一个整体方案。

    一般我们照着书本或者网上的列子写出了一个Demo,都会存在几个疑问:

    1.下载文件的文件名怎么搞?不搞的话浏览器默认名字是提交的action的名字,显然不好

    2.文件名里面想搞中文,但是实际上下载文件名出现了乱码或不显示中文怎么搞?

    3.文件的扩展名怎么搞?比如要下载的文件是word(doc,docx)或者excel(xls,xlsx)怎么办?难道让用户自己改扩展名,太不友好了吧。

    下面我们逐个说明。

    场景:我们需要下载存放在服务器tomcat中webapp文件夹,对应x项目根目录下“电子表格.xlsx"文件。即tomcatwebappx电子表格.xlsx文件。

    并且希望用户下载的名字是“我的电子表格.xlsx”。

    首先,如同Struts2框架处理其他问题一样,我们需要有一个标准的action类来对下载请求进行处理。

    Action类:

      

    Struts.xml的action配置

     

    看完代码后的解释:

    1.核心的下载功能是怎么实现的

     第一,action类里面提供了InputStream流的对象is,并且在配置文件中,同Struts框架的inputName参数进行了绑定。Strut2利用Servlet本来就有的标准流服务提供给客户端的浏览器进行下载。

      关键配置:

      result的type不再是一般的"dispatcher",而是"stream",表明返回给客户端的是流对象。一个名字为"inputName"的param参数表示,你得告诉框架,

    action类里面哪个参数是要提供下载的InputStream对象。我们这里就是is

      

         关键代码:

      InputStream对象 is,并且必须有对应的get方法,不然框架拿不到这个对象。注意大小写

         

          

      为is对象赋值,得到真正文件的流对象。

        

     2.名字怎么搞?

     这种姿势搞(顺便把扩展名和中午字符一并搞了):

       关键配置:

      attachment标示告诉浏览器是附件,不要打开(有时候下载的文件是txt之类的有些浏览器默认自动打开,而不是下载)。

      filename=&{fileName},指定要下载的文件是什么名字。${fileName}这个通配符加大括号表示,文件的名字不是fileName,而是在

     action类中一个名字叫fileName的参数的值

      关键编码:

      

      由于浏览器在只能识别用ISO8859-1编码的UTF-8的字符串,所以我们需要在代码中把中文的文件名用ISO8859-1再重新编码一下。这样就解决了中文问题。

     扩展名怎么解决?看上面的图,xlsx扩展名一并同文件名统一处理。下载的文件自然就带这个扩展名了。

    以上,文章开头的三个问题得到解决。

    至于buffersize就不解释了,所有的流传输肯定都有缓冲的概念。

    有人可能会问,为什么action的配置中,param参数了没有如<param name="contentType">application/zip</param>这样的配置。其实这就是html页面的头部标记。

    我不用是因为:

    我不需要呀!因为result的type设置为stream,让浏览器已经知道了是流文件,再加上contentDisposition把文件名连同连扩展名都搞定了,加上这个头参数没啥用。不信可以加上,随便设置什么MIME的头标记,都不起作用了。

    当然,如果每次下载的都是固定名字,配置文件也可以这样:

    这串文字代表MIME协议(多用途的网际邮件扩充协议;)里面的xlsx格式。

    下面附上MIME常用的数据类型对应关系:

    .doc     application/msword

    .docx   application/vnd.openxmlformats-officedocument.wordprocessingml.document
    .rtf       application/rtf
     
    .xls     application/vnd.ms-excel application/x-excel
    .xlsx    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
     
    .ppt     application/vnd.ms-powerpoint
    .pptx    application/vnd.openxmlformats-officedocument.presentationml.presentation
     
    .pps     application/vnd.ms-powerpoint
    .ppsx   application/vnd.openxmlformats-officedocument.presentationml.slideshow
     
    .pdf     application/pdf
    .swf    application/x-shockwave-flash
    .dll      application/x-msdownload
     
    .exe    application/octet-stream
    .msi    application/octet-stream
    .chm    application/octet-stream
    .cab    application/octet-stream
    .ocx    application/octet-stream
     
    .rar     application/octet-stream
    .tar     application/x-tar
    .tgz    application/x-compressed
    .zip    application/x-zip-compressed
    .z       application/x-compress
     
    .wav   audio/wav
    .wma   audio/x-ms-wma
    .wmv   video/x-ms-wmv
    .mp3 .mp2 .mpe .mpeg .mpg     audio/mpeg
    .rm     application/vnd.rn-realmedia
     
    .mid .midi .rmi     audio/mid
     
    .bmp     image/bmp
    .gif     image/gif
    .png    image/png
    .tif .tiff    image/tiff
    .jpe .jpeg .jpg     image/jpeg
     
    .txt      text/plain
    .xml     text/xml
    .html     text/html
    .css      text/css
    .js        text/javascript
     
    .mht .mhtml   message/rfc822

    以上

     

  • 相关阅读:
    路径变量@PathVariable/请求参数@RequestParam的绑定以及@RequestBody
    JSR303后端校验详细笔记
    创建ssm项目步骤
    利用 R 绘制拟合曲线
    在 Linux 中将 Caps 根据是否为修饰键分别映射到 esc 和 Ctrl
    Master Transcription Factors and Mediator Establish Super-Enhancers at Key Cell Identity Genes
    Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America
    Variation Revealed by SNP Genotyping and Morphology Provides Insight into the Origin of the Tomato
    The genetic, developmental, and molecular bases of fruit size and shape variation in tomato
    微信支付jsapi
  • 原文地址:https://www.cnblogs.com/wangxiaoha/p/6861513.html
Copyright © 2011-2022 走看看