利用Struts2 实现文件下载

简介:
需求如下:
进来项目中需要添加文件下载Excel功能;决定使用Struts2自带的文件下载功能
  1. 减轻工作量,提高工作效率,不需要再写常常的Header头了
  2. 要求不需要生成中间文件
Java Code
/* 
* $Id: FileDownloadAction.java 496318 2007-01-15 13:58:24Z husted $ 
* Licensed to the Apache Software Foundation (ASF) under one 
* or more contributor license agreements.    See the NOTICE file 
* distributed with this work for additional information 
* regarding copyright ownership.    The ASF licenses this file 
* to you under the Apache License, Version 2.0 (the 
* "License"); you may not use this file except in compliance 
* with the License.    You may obtain a copy of the License at 

*    http://www.apache.org/licenses/LICENSE-2.0 

* Unless required by applicable law or agreed to in writing, 
* software distributed under the License is distributed on an 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
* KIND, either express or implied.    See the License for the 
* specific language governing permissions and limitations 
* under the License. 
*/
 
package org.apache.struts2.showcase.filedownload; 

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.InputStream; 

import org.apache.commons.lang.StringUtils; 
import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.struts2.ServletActionContext; 

import com.opensymphony.xwork2.Action; 

/** 
* Demonstrates file resource download. 
* Set filePath to the local file resource to download, 
* relative to the application root ("/images/struts.gif"). 

*/
 
public  class FileDownloadAction  implements Action { 
         private String inputPath; 
         private String fileName; 
         private String contentType; 
         /** 
         * 输入流 
         */
 
         private InputStream inputStream; 
         
         public  void setInputStream(InputStream inputStream) { 
     this.inputStream = inputStream; 
  } 

   public String getFileName() { 
     return fileName; 
  } 

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

   public String getContentType() { 
     return contentType; 
  } 

   public  void setContentType(String contentType) { 
     this.contentType = contentType; 
  } 

   public  void setInputPath(String value) { 
                inputPath = value; 
        } 

         /** 
         * 如果设置了inputStream 则将inputStream输出到浏览器 
         * 如果通过inputPath获取文件,并将文件输出至浏览器; 
         * @return 
         * @throws Exception 
         */
 
         public InputStream getInputStream()  throws Exception { 
           if(inputStream !=  null){ 
             return inputStream; 
          } 
                 return ServletActionContext.getServletContext().getResourceAsStream(inputPath); 
        } 

         public String execute()  throws Exception { 
           this.setContentType( "application/vnd.ms-excel"); 
           this.setFileName( "wk.xls"); 
           /** 
            * 生成Excls文件 
            */
 
           if(StringUtils.isBlank(inputPath)){ 
             ByteArrayOutputStream output =  new ByteArrayOutputStream();        
             HSSFWorkbook wb =  new HSSFWorkbook(); 
             HSSFSheet sheet = wb.createSheet( "new sheet 2"); 
                     // Create a row and put some cells in it. Rows are 0 based. 
                    HSSFRow row = sheet.createRow(0); 
                     // Create a cell and put a value in it. 
                    HSSFCell cell = row.createCell(0); 
                    cell.setCellValue(1); 
                     // Or do it on one line. 
                    row.createCell(1).setCellValue(1.2); 
                    row.createCell(2).setCellValue( "This is a string"); 
                    row.createCell(3).setCellValue( true);             
             wb.write(output); 
             InputStream is =  new ByteArrayInputStream(output.toByteArray()); 
              this.setInputStream(is); 
          } 
//            return is; 
                 return SUCCESS; 
        } 


 
Struts.xml
                 < action  name ="download2"  class ="org.apache.struts2.showcase.filedownload.FileDownloadAction" > 
                         < result  name ="success"  type ="stream" > 
                                 < param  name ="contentType" >${contentType} </ param > 
                                 < param  name ="inputName" >inputStream </ param > 
                                 < param  name ="contentDisposition" >filename=${fileName} </ param > 
                                 < param  name ="bufferSize" >4096 </ param > 
                         </ result > 
                 </ action >
 
遗留问题:中文名称; Struts 如果是图片等等 会默认打开。稍后完善



本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/851613,如需转载请自行联系原作者
相关文章
|
Java 开发者
Struts2的文件下载 | 学习笔记
快速学习 Struts2的文件下载,介绍了 Struts2的文件下载系统机制, 以及在实际应用过程中如何使用。
73 0
|
前端开发 JavaScript Java
struts2的文件上传
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在...
937 0
|
Java
struts2 下载文件
服务端action代码  public String downloadReport() {    try {    String path = new String(filePath.getBytes("ISO-8859-1"),"utf-8");//处理get请求传过来的中文参数乱码,filePath文件路径需要set方法接收页面参数   System.out.println(path)
1553 0
Struts2文件上传
1  在Struts2中上传文件需要 commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar 这两个包。  2  确认页面form表单上的提交方式为POST,enctype属性的值为“multipart/form-data”。
779 0
Struts1——文件上传
       在struts1中,框架本身引入commons-fileupload:         只需几行代码+配置,便可以完成文件的上传。      首先使我们form表单里面的配置:   然后在ActionForm中,将我们的input为file的提交项对应为FormFile类型: 在Action中,通过我们的ActionForm就可以直接拿到上传文件的信息,进行存盘,入库等操作。
983 0
|
Java 前端开发
struts2 文件下载
文件下载是一个很常见的功能,用struts2实现文件下载的步骤: 一)定义一个Action类,FileDownload.java [java] view plaincopy package com.struts2.filedownload;      import java.io.InputStream;  
1214 0