Struts实现简单的文件下载(继上一篇文件上传)

news/2024/7/3 11:18:21 标签: struts, 文件下载

struts实现文件下载">Struts实现文件下载


1.操作下载的Action

package com.zb.action;

import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport {

    private String filename;//要下载的文件名

    //这个方法必须有
    public InputStream getInputStream() throws Exception {
        //获取上传文件夹的路径
        String path=ServletActionContext.getServletContext().getRealPath("upload/");
        return new FileInputStream(path+"/"+filename);
    }
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }
    public String getFilename() {
        return filename;
    }
    public void setFilename(String filename) {
        this.filename = filename;
    }
}

struts配置文件">2.Struts配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="default" namespace="/file" extends="struts-default">
        <!-- 这两个是上传时候的两个Action 单文件上传和多文件上传 -->
        <action name="uploadAction" class="com.zb.action.UploadAction" method="up">
            <result name="success">/ok.jsp</result>
        </action>
        <action name="manyUploadAction" class="com.zb.action.ManyUploadAction" method="up">
            <result name="success">/manyOk.jsp</result>
        </action>
        <!-- 下载 -->
        <action name="download" class="com.zb.action.DownloadAction">
            <result type="stream">
                <!-- 指定文件下载的执行方法 -->
                <!-- 参数值为Action中的getInputStream()方法的去掉get,并且首字母小写,因为后台会自动加get去找该方法-->
                <param name="inputName">inputStream</param>
                <!--- 这里的filename的值为Action中的成员变量 -->
                <param name="contentDisposition">
                    attachment;filename="${filename}"
                </param>
            </result>
        </action>
    </package>
</struts>    

至此,已经完成了,下面就是我们的页面来执行这个下载的方法了

3.JSP页面下载链接

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'ok.jsp' starting page</title>
  </head>
  <body>
      <!-- <s:property value="uploadFileName"> 这个值为上传文件的文件名 -->
    <a href="file/download?filename=<s:property value="uploadFileName"></s:property>">down</a>
  </body>
</html>



如有不足请指正。


http://www.niftyadmin.cn/n/506279.html

相关文章

PB中自定义事件ID含义

单选或多选按钮消息&#xff08;前缀:pbm_bm&#xff09; pbm_bmgetcheck 单选按钮或多选按钮是否被选。 pbm_bmgetstate 按钮是否加亮。 pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然。 pbm_bmsetstate 加亮或不加亮按钮。 pbm_bmchange 改变按钮的风…

Linux 网卡设置 IP地址配置 网络配置

Linux中网络配置 1.首先先打开windows系统中的网络适配器&#xff0c;选择虚拟机的网络&#xff0c;本地ip地址为如图所示 2.打开我们的虚拟机&#xff0c;点击右上角的电脑图标&#xff0c;右击-edit connections, 3.如果里面有连接的话&#xff0c;把他们都删除&#xff0c;点…

淺析PowerBuilder下動態SQL語句

原作者:張繼榮 王舉國 譚琦 謝元呈摘要&#xff1a;本文介紹了PowerBuilder開發工具中嵌入式SQL語句與動態SQL語句之間的區別和特點&#xff0c;並通過具體實例詳細說明了如何在PowerBuilder中使用動態SQL語句以及四種格式的動態SQL語句各自所能實現的功能。關鍵字&#xff…

CentOS 安装jdk(详细教程)

在CentOS系统下安装jdk 首先准备一下jdk的安装包&#xff0c;我这里提供的为1.6 版本的。下方为链接。 jdk 1.6:链接&#xff1a;https://pan.baidu.com/s/1o9VVggU 密码&#xff1a;h95h 在提供2个软件&#xff1a; 远程链接 链接&#xff1a;https://pan.baidu.com/s/1kX…

PB判断是否有重复数据

使用Update函数保存数据之前&#xff0c;通常要判断数据窗口中是否有主键重复的数据&#xff0c;如果有重复则不允许提交。如果我们不编写程序判断&#xff0c;数据窗口本身业可以进行校验&#xff0c;但是显示的都是英文的提示信息。为此&#xff0c;我们通常在DBError事件中返…

pb中如何控制并发和控制死锁

锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对…

Linux常用命令大全(非常全!!!)

Linux常用命令大全&#xff08;非常全&#xff01;&#xff01;&#xff01;&#xff09; 最近都在和Linux打交道&#xff0c;感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制&#xff0c;当然&#xff0c;这也是很多人喜欢linux的原因&#xff0c;…

PB游标编程

String ls_temp1String ls_temp2declare cur_name CURSOR FORselect field1,field2 from tablenamewhere conditionOPEN cur_name;FETCH cur_name INTO :ls_temp1,:ls_temp2;do while sqlca.sqlcode 0//其它处理语句&#xff0c;尽量不要包含SQL语句。如果要包含&#xff0c;一…