文件下载(只需要简单的四步),Java中都通用

我们就直接切入主题啦,文件下载只需要四步:

1.设置文件ContentType类型

2.设置文件头

3.通过response获取ServletOutputStream对象(out)

4.写到输出流(out)中

下载代码:

这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletContext对象,这个对象的用途,下面实例中有说明

下载,需要用到两个jar包:commons-fileupload.jar和commons-io.jar

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.context.ServletContextAware;  

    import javax.servlet.ServletContext;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;  

    @Controller
    public class FileController implements ServletContextAware{
        //Spring这里是通过实现ServletContextAware接口来注入ServletContext对象
        private ServletContext servletContext;  

        @RequestMapping("file/download")
        public void fileDownload(HttpServletResponse response){
            //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载
            String path = servletContext.getRealPath("/");  

            //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
            response.setContentType("multipart/form-data");
            //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)
            response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf");
            ServletOutputStream out;
            //通过文件路径获得File对象(假如此路径中有一个download.pdf文件)
            File file = new File(path + "download/" + "download.pdf");  

            try {
                FileInputStream inputStream = new FileInputStream(file);  

                //3.通过response获取ServletOutputStream对象(out)
                out = response.getOutputStream();  

                int b = 0;
                byte[] buffer = new byte[512];
                while (b != -1){
                    b = inputStream.read(buffer);
                    //4.写到输出流(out)中
                    out.write(buffer,0,b);
                }
                inputStream.close();
                out.close();
                out.flush();  

            } catch (IOException e) {
                e.printStackTrace();
            }
        }  

        @Override
        public void setServletContext(ServletContext servletContext) {
            this.servletContext = servletContext;
        }
    }  
时间: 2024-10-17 02:58:01

文件下载(只需要简单的四步),Java中都通用的相关文章

Java中都通用文件下载(ContentType、文件头、response、out四步骤)

Java中都通用文件下载(ContentType.文件头.response.out四步骤) 新浪微博:IT国子监(记得关注噢) http://weibo.com/itguozijian   我们就直接切入主题啦,文件下载只需要四步: 1.设置文件ContentType类型 2.设置文件头 3.通过response获取ServletOutputStream对象(out) 4.写到输出流(out)中 下载代码: 这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletCon

四步搞定NiosII工程路径改变(转)

四步搞定NiosII工程路径改变 (2014-08-03 16:41:01) 转载▼http://blog.sina.com.cn/s/blog_bff0927b0102uy30.html 标签: nios 路径改变 setting.bsp 分类: 开发工具 在NiosII的开发过程中,路径改变会带来一系列问题:比如当我们在PC上某个路径下新建一个工程Nios_Prj(含QuartusII工程.Qsys模块和NiosII工程)后,假设其路径为C:\Nios_Prj,如果将工程路径改为D:\Nio

简单四步开始树莓派上的Docker之旅

大概这篇博文发表之后,应该算是我个人的第一篇翻译作品了,翻译的可能不是很到位,望各位看官大刀砍过来. 原文链接:http://resin.io/blog/docker-on-raspberry-pi-in-4-simple-steps/ 以下是文章正文部分 更新:我们已经放出了ARM下Docker 0.7.2,点击阅读更多 一周以前,我们放出了树莓派上安装Docker的相关教程,那么大家在兴奋之余也反馈了很多问题诸如安装过程很麻烦,其中也有的反馈说"为什么不直接提供一个镜像呢?" 我们

快速体验 Sentinel 集群限流功能,只需简单几步

? Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器. Sentinel 从 1.4.0 版本开始提供集群流控特性,但使用 Sentinel 集群限流需要对一系列的动态数据源进行相关配置,并且需要对开源控制台进行一些改造,有一定的使用成本.为了大家更好地理解集群流控并快速地使用,我们提供了云上版本的 Sentinel 集群限流控制台示例.只需要简单的几步即

如何在CAD中绘制长方体?只需简单四步

如何在CAD中绘制长方体?只需简单四步.在日常的工作中,特别是一些CAD行业,日常的基本工作就是编辑绘制CAD图纸,在绘制CAD图纸的时候需要借助一下工具来进行绘制,比如说CAD编辑器来绘制CAD图纸既方便又快捷,但是在绘制图纸的时候也会遇到许多的文件,那就是如何在CAD中绘制长方体?有什么好的办法吗?具体要怎么来进行操作?下面我们就来一起看看具体操作步骤吧. 使用步骤一:首先电脑中没有下载安装CAD编辑器的小伙伴们,还是需要在日常使用的电脑中任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CA

java入门第四步之应用服务器的安装(Tomcat)【转】

首先打开myeclipse,在myeclipse菜单栏下面有两个按钮: 左边的按钮是进行项目的部署的(即将项目部署到服务器上),右边的按钮是进行服务器的启动的,如果你安装了tomcat服务器,那你就可以在右边按钮点击的下拉框中 找到对应的服务器, 下面我来介绍下Tomcat服务器的安装(也不能叫安装,就是引入下): 点击菜单栏的Window---->选择Preferences----->在左边的菜单栏中选择MyEclipse---->servers----->tomcat 然后根据

只需四步,帮助企业做好MaxCompute成本优化

摘要: 阿里云在和很多企业交流的过程中发现他们在使用MaxCompute的时候往往会遇到一些成本相关的问题,而在与客户不但交流沟通的过程中,阿里云在成本优化方面也积累了大量的经验,因此也希望能够将这些经验沉淀下来分享给更多的企业和开发者,本文就将与大家分享帮助企业做好MaxCompute成本优化的"四步走"战略. 摘要:阿里云在和很多企业交流的过程中发现他们在使用MaxCompute的时候往往会遇到一些成本相关的问题,而在与客户不但交流沟通的过程中,阿里云在成本优化方面也积累了大量的经

四步教你SpringBoot+Mybatis-plus分页插件(简单实现)

MyBatis-Plus 分页插件---四步走 第一步:编写分页插件配置类 //Spring boot方式 @EnableTransactionManagement @Configuration @MapperScan("com.itheima.mapper") public class MyBatisPlusConfig { /** * 分页插件 * @return */ @Bean public PaginationInterceptor paginationInterceptor

简单的初步认识Java这门编程语言

JAVA的诞生:Java于1995年由SUN公司研发推出. Java发展:因为其使用免费,众多开源插件和类库,先进的语法面向对象等特性,使得其受到开发人员的喜爱和发展.并且因为其免费开源,有许多的无名工程师.极客在为java进行完善和开发. Oracle:SUN公司于09年被Oracle(甲骨文)收购,所以java现为Oracle旗下的编程语言. 兼容java的主流的数据库:MySQL.DB2.SQLServer.Oracle 跨平台的重要性:Windows是个人PC的主流操作系统,而服务器操作