struts-下载

简介:
一、创建项目
    项目名称:demodowload
二、添加struts jar包
    commons-fileupload-1.2.2.jar
    commons-io-2.0.1.jar
    commons-lang3-3.1.jar
    freemarker-2.3.19.jar
    javassist-3.11.0.GA.jar
    ognl-3.0.5.jar
    struts2-core-2.3.4.jar
    xwork-core-2.3.4.jar
三、在web.xml文件中配置核心过滤器
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>Struts2_13fileUpload</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>
四、在WebRoot下创建存储文件的目录
    /download
    在该目录下存放图片.jpeg
五、在项目中添加struts配置文件中添加核心配置文件
    1.在项目中创建conf目录
        /conf
    2.在conf目录下不回struts.xml文件
        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            "http://struts.apache.org/dtds/struts-2.3.dtd">
        <struts>
            <constant name="struts.enable.DynamicMethodInvocation" value="false" />
            <constant name="struts.devMode" value="true" />
            <constant name="struts.ui.theme" value="simple"/>    
        </struts>
六、创建Action
    1.在src下创建包
        包名:action
    2.在包下创建Action
        Action名称:DownloadAction.java
        Action内容:
        public class DownloadAction extends ActionSupport {
            private String fileName;
            /*
             * 把读取文件的流对象返回,Web服务器会读取流对象中的数据并封装到response中,然后发送到客户端
             */
            public InputStream getInputStream() throws FileNotFoundException, UnsupportedEncodingException{
                InputStream is = null;
                this.fileName="图片.jpeg";
                //把URL路径转化为服务器的本地路径
                String realPath = ServletActionContext.getServletContext().getRealPath("/download/"
                        +this.fileName);
                is = new FileInputStream(realPath);        
                return is;
            }
            public String doDownloadFile(){
                //此处可加入业务,如判断用户是否有下载权限
                return SUCCESS;
            }
            public String getFileName() throws UnsupportedEncodingException {
                //编码的目的是为了解决中文文件名出现乱码的问题
                return java.net.URLEncoder.encode(fileName, "UTF-8");//该编码方式在IE6下可能有该问题:文件名长度不能超过16个字符
                //return new String(this.fileName.getBytes("GBK"),"ISO-8859-1");//该编码方式可兼容IE6,但GBK不利于实现国际化
                
            }
            public void setFileName(String fileName) {
                this.fileName = fileName;
            }
        }
    3.在struts.xml文件中进行action配置
        <package name="default" namespace="/" extends="struts-default"> 
             <action name="doDownloadFile" class="action.DownloadAction" method="doDownloadFile">
                 <result name="success" type="stream">
                     <param name="inputName">inputStream</param><!--文件对应的流对象  -->
                     <param name="contentDisposition">attachment;filename="${fileName}"</param><!--发送给客户端的文件名,需要注意中文乱码问题  -->
                     <param name="contentType">application/octet-stream</param><!--文件类型,application/octet-stream是不限制类型  -->
                     <param name="bufferSize">1024</param><!--缓冲区大小  -->
                 </result>
             </action>
        </package>
七、页面准备
    页面名称:downloadFile.jsp
    页岩内容:
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <s:a action="doDownloadFile">下载文件</s:a>
    </body>
    </html>

本文转自  素颜猪  51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1559526

    

相关文章
|
机器学习/深度学习 算法 搜索推荐
阿里云机器学习平台PAI与香港大学合作论文入选INFOCOM 2022,有效减少大规模神经网络训练时间
近日,阿里云机器学习平台 PAI 与香港大学吴川教授团队合作的论文”Efficient Pipeline Planning for Expedited Distributed DNN Training”入选INFOCOM(IEEE International Conference on Computer Communications) 2022,论文提出了一个支持任意网络拓扑的同步流水线并行训练算法,有效减少大规模神经网络的训练时间。
阿里云机器学习平台PAI与香港大学合作论文入选INFOCOM 2022,有效减少大规模神经网络训练时间
|
NoSQL 架构师 Java
再见 CentOS,AlmaLinux 9 测试版发布
美东时间 4 月 19 日,AlmaLinux 团队宣布了他们 9.0 测试版的里程碑。该团队表示,AlmaLinux 9.0 Beta 目前适用于所有受支持的架构,包括 x86_64、AArch64、PPC64LE 和 s390x。
758 0
|
JavaScript 前端开发 Windows
JS导出PDF插件(支持中文、图片使用路径)
原文:JS导出PDF插件(支持中文、图片使用路径) 在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfmake,很好地解决了此问题。它的效果可以先到http://pdfmake.org/playground.html查看。
2717 1
|
弹性计算 数据安全/隐私保护
阿里云快照备份和镜像备份方式有什么不同
我们在购买阿里云服务器之后,很多用户处于数据安全的考虑的会定期备份自己阿里云服务器上的数据,传统的FTP等方式备份太麻烦,而阿里云提供的快照和镜像备份方式可以很好的解决用户备份的问题,那么阿里云提供的快照和镜像备份方式有什么不同,有什么关系呢?
811 0
阿里云快照备份和镜像备份方式有什么不同
|
JavaScript
推荐一款工具 -- Watt Toolkit
你是否在为访问Github速度慢而发愁?来来来,推荐你一款工具试试 「Watt Toolkit」是一个开源跨平台的多功能游戏工具箱。 网络加速 使用 YARP.ReverseProxy 开源项目进行本地反代来支持更快的访问游戏网站。 脚本配置 通过加速服务拦截网络请求将一些 JS 脚本注入在网页中,提供类似网页插件的功能。 账号切换 一键切换已在当前 PC 上登录过的 Steam 账号,与管理家庭共享库排序及禁用等功能。
5263 0
推荐一款工具 -- Watt Toolkit
|
架构师 云计算
阿里云的认证有几个等级?适合什么人考?
为什么在这样的大环境下,还有一部分人能挣钱,因为此消彼长,实体经济收到冲击的情况下,虚拟经济必然要大幅增长,这样一来市场就需要大量的人才来满足需求。
阿里云的认证有几个等级?适合什么人考?
|
存储 人工智能 运维
黄秉豪:让科技赋能成为华发集团第二增长曲线 | 阿里CIO学院名人堂
面向未来,华发集团的数字化转型势在必行,流程数字化、服务数字化,资产数字化正在加速推进,基于数字化的多元业务有望成为企业的第二增长曲线。
黄秉豪:让科技赋能成为华发集团第二增长曲线  | 阿里CIO学院名人堂
|
域名解析 人工智能 网络协议
从Cloudflare事件看DNS服务的重要性
美国时间7月17日,美国知名的网络安全服务提供商Cloudflare,出现了突发网络服务故障。通过这个事件,和大家聊聊关于网络安全稳定的思考,以及稳定、安全的DNS服务的重要性。
从Cloudflare事件看DNS服务的重要性
|
JavaScript
循环遍历获取table中的td,tr
html中获取table的td,tr数据
565 0
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1905 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?