• struts2基于注解的文件下载


    参数说明:

    type = "stream",这里的type一定要等于stream;

    对params的几个参数的解释:

    "contentType", "application/octet-stream" : 文件格式;

    "inputName", "attachstream" :获取文件的方法名;这里的attachstream需要和action里的attachstream对应,类型就是InputStream;

    "contentDisposition", "attachment;filename="${attachname}"":文件内容(显示的)属性,

    这里的filename="${attachname}" :下载之后的文件名;这里需要在action里定义一个变量,去获取下载文件的文件名,包括后缀,例如:下载的文件为**/**/upload/test.jpg,那么需要定义一个变量attachname,变量名一定要对应,然后,attachname = test.jsp;

    "bufferSize", "4096" :限定下载文件 缓冲区的值;

    通过上述属性的解释,我们可以知道,在action里需要定义的变量有以下几个:

    private InputStream attachstream;//文件读取流对象

    private String attachname;//下载文件的名字

    然后需要对应的getter/setter方法,

    action实现代码如下:

     1 @Action(value = "/admin/toDownload",
     2             results = {@Result(name = "download", type = "stream", 
     3                         params = {
     4                         "contentType", "application/octet-stream",
     5                         "inputName", "attachstream",
     6                         "contentDisposition", "attachment;filename="${attachname}"",
     7                         "bufferSize", "4096"
     8             })})
     9     public String toDownload(){
    10         String path = ServletActionContext.getServletContext().getRealPath("/" + fileName);//fileName是页面传过来的参数
    11         try {
    12             attachstream = new FileInputStream(path);
    13             String []attachnames = fileName.split("/");
    14             attachname = attachnames[attachnames.length - 1];
    15         } catch (FileNotFoundException e) {
    16             e.printStackTrace();
    17         }
    18         return "download";
    19     }
    View Code

    我自己写的:

     1 @ParentPackage("managerPackage")
     2 @Namespace("/districtTest")
     3 @Action("districtTest")
     4 @Results({
     5     @Result(name="districtTest_list",location="/manage/districtTest/districtTest_list.jsp"),
     6     @Result(name="districtTest_add",location="/manage/districtTest/districtTest_add.jsp"),
     7     @Result(name="districtTest_edit",location="/manage/districtTest/districtTest_edit.jsp"),
     8     @Result(name="districtTest_show",location="/manage/districtTest/districtTest_show.jsp"),
     9     @Result(name="districtTest_show0",location="/manage/districtTest/districtTest_show0.jsp"),
    10     @Result(name = "download", type = "stream", 
    11     params = {
    12     "contentType", "application/octet-stream",
    13     "inputName", "inputStream",
    14     "contentDisposition", "attachment;filename="${attachname}"",
    15     "bufferSize", "4096"
    16 })
    17     
    18 })
    19 
    20 
    21 
    22 //下载
    23     public String download(){
    24         try {
    25             
    26             if(upload!=null&&!"".equals(upload)){
    27                 String path = ServletActionContext.getServletContext().getRealPath("/" + upload);
    28                 inputStream = new FileInputStream(path);
    29                 String []attachnames = upload.split("/");
    30                 attachname = attachnames[attachnames.length - 1];
    31             }
    32             return "download";
    33         } catch (Exception e) {
    34             // TODO: handle exception
    35             Loggers.error("----DistrictTestAction的download方法错误"+e.getMessage());
    36             e.printStackTrace();
    37         }
    38         return ERROR;
    39     }
    View Code
  • 相关阅读:
    TensorFLow手写字识别深度学习网络分析详解
    使用MSBUILD 构建时出错 error MSB3086: 任务未能使用 SdkToolsPath“”或注册表项“XXX”找到“LC.exe”,请确保已设置 SdkToolsPath。
    解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题
    SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)
    git push 冲突
    ubuntu快捷键收集
    ubuntu中wine下安装QQ
    ubuntu下安装无线网卡去驱动Qualcomm-Atheros-QCA9377
    spring mvc添加静态资源访问时@Controller无效的解决
    git更新到远程服务器代码
  • 原文地址:https://www.cnblogs.com/yang1018/p/7169963.html
Copyright © 2020-2023  润新知