• 使用Response下载文件,servlet中的文件下载是通过流来实现的

      我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很简单,只有一个a标签.

    DownloadAction如下:

package com.wang.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; public class DownloadAction { public String execute() throws IOException{
//获取response和request
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
//获取要下载的文件夹路径
String path=request.getRealPath("/from");
File file=new File(path,"IMG_0968.jpg");
response.setContentLength((int)file.length());
response.setCharacterEncoding("utf-8");
//此contenttype意思是不知道文件类型,使用二进制流的方式传输
response.setContentType("application/octet-stream");
//注意,filename=后面的内容不加引号,我第一次加了引号,结果出错
response.setHeader("Content-Disposition", "attachment;filename=IMG_0968.jpg"); InputStream is=new FileInputStream(file);
//通过response获得输出流
OutputStream os=response.getOutputStream();
byte[] b=new byte[1024];
int len=0;
while((len=is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.close();
System.out.println("success download");
//注意:这里返回的是null
return null;
}
}

DownloadAction

    这是使用servlet的reqsponse下载文件的方式,注意在action中,返回值是null,配置文件中不需要result标签,download.jsp和struts.xml省略.

  • 使用Struts2的StreamResult进行文件下载.

    webRoot文件夹下新建了一个文件夹from,里边放了两张图片分别是IMG_0968.jpg和IMG_0975.jpg.以下载这两张图片为例:

    downLoad.jsp页面:

<body>
<a href="streamDownload.action?fileName=IMG_0968.jpg">流的方式下载第一张图片</a><br>
<a href="streamDownload.action?fileName=IMG_0975.jpg">流的方式下载第二张图片</a> </body>

    StreamDownloadAction页面:

package com.wang.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class StreamDownload extends ActionSupport{ private String fileName;
@Override
public String execute() throws Exception {
return SUCCESS;
} public InputStream getInputStream() throws IOException{ HttpServletRequest request = ServletActionContext.getRequest();
String path=request.getRealPath("/from");
InputStream is=new FileInputStream(new File(path,fileName));
return is;
} public String getFileName() {
return fileName;
} public void setFileName(String fileName) {
this.fileName = fileName;
} }

StreamDownloadAction

    struts.xml页面:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts> <package name="default" namespace="/" extends="struts-default">
<action name="streamDownload" class="com.wang.action.StreamDownload">
<result type="stream">
<!-- inputName默认就是InputStream,可以省略,也可以自己修改,如改成aaa,
则Action里的方法也要改成public InputStream getAaa() -->
<param name="inputName">InputStream</param>
<param name="contentDisposition">attachment;fileName=${fileName}</param>
</result>
</action>
</package>
</struts>

Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载的更多相关文章

  1. Javaweb学习笔记——上传下载文件

    一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...

  2. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  3. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  4. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  5. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  6. [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异

    [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...

  7. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  8. java 学习笔记之 流、文件的操作

    ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...

  9. Java NIO 学习笔记(四)----文件通道和网络通道

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

随机推荐

  1. java-JDBC登录注册代码

    登录: public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); Sy ...

  2. 一台linux真实机实现多台Tomcat服务

    一.事前准备 ü 确保linux并未安装tomcat (这里虚拟机测试) ü 下载jdk与tomcat ① jdk-6u18-ea-bin-b01-linux-i586-20_aug_2009.bin ...

  3. gdb调试工具vi编译器命令参考网址

    vi编译器命令:参考http://www.cnblogs.com/junw_china/articles/1708967.html gbd调试命令:参考http://blog.chinaunix.ne ...

  4. xcode gdb/lldb调试命令

    命令                        解释 break NUM               在指定的行上设置断点. bt                      显示所有的调用栈帧.该 ...

  5. 剑指Offer面试题:31.两个链表的第一个公共节点

    一.题目:两个链表的第一个公共节点 题目:输入两个链表,找出它们的第一个公共结点. 链表结点定义如下,这里使用C#语言描述: public class Node { public int key; p ...

  6. 跟vczh看实例学编译原理——一:Tinymoe的设计哲学

    自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...

  7. [OpenGL][SharpGL]用Polygon Offset解决z-fighting和stitching问题

    [OpenGL][SharpGL]用Polygon Offset解决z-fighting和stitching问题 本文参考了(http://www.zeuscmd.com/tutorials/open ...

  8. 先有 Mac 还是先有银元?

    自从开设了这个公众号以后,收到最多的问题是:听了 Mac 君的介绍,我也觉得 Mac 很好,可是穷屌丝一枚,真买不起,怎么破?前几天我在微博上说,读了我的书,就有 Mac 了.居然有读者来问:这是真的 ...

  9. [已招满,谢谢关注]Sogou招聘C#开发人员,有意者请进

    职位名称:c#开发工程师 工作地点:搜狐网络大厦 职责:搜狗商业平台桌面产品 职位要求: 1. 计算机或者相关专业本科或以上学历 2. 精通c#,两年以上实际项目开发经验 3. 熟悉C/S开发架构和设 ...

  10. Nginx配置文件解析

    user nginx nginx; #定义Nginx运行的用户和用户组 worker_processes 1; #nginx进程数,建议设置为等于CPU总核心数 worker_rlimit_nofil ...