博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java文件下载
阅读量:5241 次
发布时间:2019-06-14

本文共 3289 字,大约阅读时间需要 10 分钟。

Action的写法:

package cn.itcast.struts2.demo2;

import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder;

import org.apache.struts2.ServletActionContext;

import sun.misc.BASE64Encoder;

import com.opensymphony.xwork2.ActionSupport;

/**  * 文件下载  *  * @author seawind  *  */

public class DownloadAction extends ActionSupport {

        private String filename;

        public void setFilename(String filename) throws IOException {  

                // 文件名 get方式提交 乱码   

                this.filename = new String(filename.getBytes("ISO-8859-1"), "utf-8");  }

                public String execute() throws Exception {   

                System.out.println("下载:" + filename);  

                // 文件下载 结果集 是一个流  

                return SUCCESS;  

         }

      // 提供 下载文件 流  

       // 因为StreamResult中 protected String inputName = "inputStream";  

      public InputStream getInputStream() throws IOException {

                // 下载文件输入流   

               File file = new File(ServletActionContext.getServletContext()     .getRealPath("/download") + "/" + filename);  

              return new FileInputStream(file);

     }

        // 根据下载文件名动态获得 MIME文件类型  

       public String getContentType() {  

            // 读取tomcat/conf/web.xml  

           return ServletActionContext.getServletContext().getMimeType(filename);

           }

       // 下载附件名 ${filename}  

      public String getFilename() throws IOException {   

            // 附件名乱码 问题 (IE和其它浏览器 : URL编码 , 火狐: Base64编码)

            String agent = ServletActionContext.getRequest() .getHeader("user-agent");   

           return encodeDownloadFilename(filename, agent);  

      }

 

      public String encodeDownloadFilename(String filename, String agent)    throws IOException {

           if (agent.contains("Firefox")) {

           // 火狐浏览器    

               filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?=";  

           }else {

              // IE及其他浏览器  

              filename = URLEncoder.encode(filename, "utf-8");  

          }  

         return filename;

       }

}

 

jsp的写法:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/download.action?filename=MIME协议简介.txt">MIME协议</a>
<a href="${pageContext.request.contextPath }/download.action?filename=Struts2上传下载.ppt">Struts2上传下载.ppt</a>
<a href="${pageContext.request.contextPath }/download.action?filename=老男孩.mp3">老男孩.mp3</a>
</body>
</html>

 

XML的写法:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts SYSTEM "" PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"> -<struts>

<constant value="true" name="struts.devMode"/>

<!-- 文件上传总大小 -->

<constant value="20000000" name="struts.multipart.maxSize"/>

<!-- 开启ognl 静态方法调用 -->

<constant value="true" name="struts.ognl.allowStaticMethodAccess"/>

<!-- 修改默认主题样式 -->

<constant value="simple" name="struts.ui.theme"/>-

<package name="basicstruts2" extends="struts-default">-

<action name="index"><result>/index.jsp</result></action>

<!-- 文件下载 -->

-<action name="download" class="cn.itcast.struts2.demo2.DownloadAction">-

<result type="stream">

<!-- 使用默认流 名称 inputStream, 设置两个头 -->

<!-- 应该根据文件名 动态获得 MIME类型 -->

<!-- 在Action 提供 getContentType方法 -->

<param name="contentType">${contentType}</param>

<!-- 解析下载附件名 问题-->

<param name="contentDisposition">attachment;filename=${filename}</param>

</result>

</action>

</package>

</struts>

 

 

 

转载于:https://www.cnblogs.com/hemingshui/p/3351479.html

你可能感兴趣的文章
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
FTTB FTTC FTTH FTTO FSA
查看>>
OpenAI Gym
查看>>
stap-prep 需要安装那些内核符号
查看>>