在上一篇博客 Struts2框架之文件上传 介绍了在struts框架中如何进行文件上传,下面将介绍如何使用struts框架进行文件的下载。

在不使用struts框架时,我们也可以通过servlet进行文件下载(参考:Java Web通过Servlet实现文件下载)。这种方式我们还需要进行文件流操作,而使用struts框架后,这些操作都可以有框架操作。

第1步:创建download动作。

package cn.hestyle.web.action;import com.opensymphony.xwork2.ActionSupport;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;public class DownloadAction extends ActionSupport {private InputStream inputStream;//需要实现inputStream的getter、setter方法public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public String download() throws FileNotFoundException {//对inputStream进行赋值File file = new File("/Users/hestyle/Desktop/动漫照片.jpg");inputStream = new FileInputStream(file);return "success";}
}

第2步:在struts.xml文件中配置inputStream

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="p1" extends="struts-default"><action name="download" class="cn.hestyle.web.action.DownloadAction" method="download"><!-- 配置成功视图 --><result name="success" type="stream"><!-- 配置输出流 --><param name="inputStream">inputStream</param><!-- 以附件的方式传递 --><param name="contentDisposition">attachment;filename=image.jpg</param><param name="contentType">application/octet-stream</param></result></action></package>
</struts>

第3步:在浏览器访问download动作

扩展:动态设置文件名

在上面我们把文件名写死了,其实也可以动态设置。
修改DownloadAction动作,添加fileNamegetFileName方法属性,并且将fileName进行URL转码(防止中文乱码)。

package cn.hestyle.web.action;import com.opensymphony.xwork2.ActionSupport;import java.io.*;
import java.net.URLEncoder;public class DownloadAction extends ActionSupport {private InputStream inputStream;private String fileName;//需要实现inputStream的getter、setter方法public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}//需要实现fileName的getter、setter方法public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String download() throws FileNotFoundException, UnsupportedEncodingException {//对inputStream进行赋值File file = new File("/Users/hestyle/Desktop/动漫照片.jpg");fileName = file.getName();//进行url转码,放置前端出现中文乱码的情况fileName = URLEncoder.encode(fileName, "utf-8");inputStream = new FileInputStream(file);return "success";}
}

修改配置文件

浏览器访问download动作。
以上就是Struts2框架之文件下载的主要内容,感谢各位道友的阅读,顺带给个关注,点个赞呗~

Struts2框架之文件下载相关推荐

  1. struts2框架之文件下载(参考第三天学习笔记)

    下载 1. 下载是一种响应方式 正常的响应:响应正文是html:response.getWriter().print("html"); 下载的响应: 1.一个流:字节数据:resp ...

  2. nfine框架 上传文件_MVC之Struts2框架--你并不了解的高级应用

    <"爱读书"--给你讲技术>,我来看书,你来进步,让我们开始吧! 本书简介 书名为<轻量级JavaEE企业应用实战>,是本人在学习JavaEE框架的时候阅读 ...

  3. Struts2框架基本学习(二)

    一.Struts2的Servlet的API的访问   在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的.在实际开发中,经常使用到Servlet的API,比如进行 ...

  4. 基于Struts2框架的名片管理系统

    目录 1.系统设计 2.数据库设计 3.系统管理 4.用户管理 5.名片管理 本篇博文将分享一款基于Struts2框架的名片管理系统,JSP引擎为Tomcat9.0,数据库采用的是MySQL5.5,集 ...

  5. 使用struts2框架来实现CRUD(create、read、update、delete)

    1相关的类和包 2.源码: struts.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTY ...

  6. java struts2 框架 入门简介

    目录 一.Struts2框架执行流程 二.Struts2的快速入门 1.导入jar包 2.配置web.xml文件 3.配置struts.xml文件 4.创建Action来完成逻辑操作 三.Struts ...

  7. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  8. Struts2框架学习Action命名空间创建方式

         Struts2框架中Action类时一个单独的javabean对象,相比struts1来说,不需要去继承任何类型或实现任何借口,表单数据包含在Action中,而Struts1则必须继承org ...

  9. Maven构建Struts2框架的注意事项

    [本人出错点:404,就是在web.xml配置文件中少配置了struts.xml的路径] 1.创建Maven,搭建Struts框架,实现最基本的Hello World 在pom.xml中加入strut ...

  10. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。...

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

最新文章

  1. html溢出攻击,溢出(漏洞)攻击的实现及防御
  2. 用python画爱心的代码-Python一行代码画个爱心案例
  3. mysql selectprovider_SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建
  4. 利剑无意之JAVA面试题(三)
  5. 双系统还是虚拟机 linux系统时间,你会选择Mac虚拟机还是双系统
  6. 前端怎么画三角形_WEB前端-CSS三角形绘制方法
  7. js 将input、textarea、Select等控件替换成标签(span)
  8. 腾讯,开源了,高性能 RPC 框架,是要干DUBBO 吗?
  9. header元素 footer元素 hgroup元素
  10. 1、spring之Resource加载
  11. android 根据宽度调整字体大小,android 字体大小 根据分辨率 自动调整
  12. 虚拟服务器网络不通,VMware Workstation ping 不通的解决方法
  13. F和弦(大横按)的训练方法
  14. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园新闻发布管理系统574ec
  15. Linux alias编写
  16. Ethyl 2-azidoacetate,637-81-0,叠氮乙酸乙酯MDL: MFCD00190177的分子量是129.117
  17. 【STM32】HAL库 STM32CubeMX教程十二---IIC(读取AT24C02 )
  18. 获取豆瓣用户看过的电影名以及评分,短评,标签等
  19. 运筹学 美国人在计算机上实现的四,【天大作业】2019年秋学期考试《计算机软件技术基础(2)》离线作业考核试题{全套100分}...
  20. 高并发下如何设计秒杀系统

热门文章

  1. IDEA 配置log4j
  2. java字符数组比大小排序_Java字符串数组进行大小排序
  3. 常见的立体匹配算法介绍
  4. dnastar拼接反向互补序列_DNAstar使用说明
  5. 使用Hackintool工具生成全新的序列号及更改黑苹果SN三码序列号简易版教程
  6. 华为工作法--读后感
  7. 单片机微型计算机 原理及接口技术,微机原理及单片机接口技术
  8. 用flash做古诗动画_Flash制作跟我学 用遮罩技术制作古诗动画-FLASH课件制作(FLASH课件制作教程)-flash课件吧(湖北金鹰)...
  9. 用大白菜制作linux启动盘制作工具,使用大白菜+FbinstTool制作多系统的启动盘
  10. python实现同花顺股票模拟交易+东方财富模拟交易