struts2--图片/Excel下载

本文介绍如何使用Struts2框架实现文件下载功能,并通过示例展示了如何生成Excel文件并提供下载。具体包括定义Action类处理文件下载逻辑、配置struts.xml文件以及利用HSSFWorkbook生成Excel的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片下载


public class DownloadAction {

    private InputStream is;// 先将服务端本地的文件读到内存中,客户端才可以下载
    private String fileName;// 起名随意,会在xml文件中配置

    public InputStream getIs() {
        return is;
    }

    public void setIs(InputStream is) {
        this.is = is;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String execute() throws UnsupportedEncodingException {
        // 要下载的文件
        fileName = "1.xls";
        is = ServletActionContext.getServletContext().getResourceAsStream(
                "/imags/" + fileName);
        fileName = new String("学生表".getBytes("UTF-8"),"ISO8859-1");
        return "success";

    }
}

struts.xml

<action name="download" class="com.demo.actions.DownloadAction">
	<result type="stream">
		<param name="inputName">is</param>
		<param name="contentDisposition">attachment;filename=${fileName}</param>
	</result>
</action>


==================================================================================================================================


生成Excel文件并下载


    //必须提供getter/setter方法

    private InputStream excelStream; // 输出流变量  
    private String excelFileName; // 下载文件名  

        /**
	 * 导出符合条件的市场活动列表
	 * @return
	 */
	public String exportMarketActivityAsExcel(){
		
		HSSFWorkbook book = null;
		
		try {
			// 根据条件查询出符合条件的市场活动列表
			List<VMarketActivity> activityList = 
					marketActivityService.exportMarketActivityAsExcel(marketActivityCondition);
			// 创建HSSFWork
			book = new HSSFWorkbook();
			// 创建表格
			HSSFSheet sheet = book.createSheet("市场活动列表");
			
			// 创建标题行
			HSSFRow row = sheet.createRow(0);
			row.createCell(0).setCellValue("名称");
			row.createCell(1).setCellValue("开始日期");
			row.createCell(2).setCellValue("结束日期");
			
			// 遍历集合
			for (int i = 0; i < activityList.size(); i++) {
				// 得到一行
				row = sheet.createRow(i + 1);
				VMarketActivity ac = activityList.get(i);
				// 输出一行中每列的值
				row.createCell(0).setCellValue(ac.getName());
				row.createCell(1).setCellValue(ac.getStartDate());
				row.createCell(2).setCellValue(ac.getEndDate());
			}
			
			// 将文件存到流中  
			// 使用ByteArrayInputStream,将数据写入字节流数组,直接输出,在服务器不会产生excel文件
			// 使用FileInputStream,将数据写入文件流,在服务器会产生excel文件
			ByteArrayOutputStream os = new ByteArrayOutputStream();  
			book.write(os);  
			byte[] fileContent = os.toByteArray();  
			ByteArrayInputStream is = new ByteArrayInputStream(fileContent);  

			excelStream = is; //文件流  
			excelFileName = new String("市场活动列表".getBytes("UTF-8"),"ISO8859-1") + ".xls"; //设置下载的文件名 
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				book.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return SUCCESS;
	}

struts.xml

<action name="exportMarketActivityAsExcel" class="marketActivityAction" method="exportMarketActivityAsExcel">
	<result name="success" type="stream">  
                <!-- 下载文件的类型,如果你不知道是什么格式,可以去 tomcat\conf\web.xml下找 -->  
                <param name="contentType">application/vnd.ms-excel</param>  
                <!-- 返回流 excelStream为action中的流变量名称 -->  
                <param name="inputName">excelStream</param>  
                <!-- attachment 这个位置的参数挺特殊的,可以设置成下载时,是否出现个下载提示框,或者直接下载之类的。  
                fileName指定生成的文件名字(适合动态生成文件名,比如做报表时,一般都要说是几月的统计数据之类)为action中变量-->  
                <param name="contentDisposition">  
                    attachment;filename=${excelFileName}  
                </param>  
                <param name="bufferSize">1024</param>  
         </result> 
</action>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值