图片下载
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>