后台(28)——文件下载

探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制



Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南



自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


版权声明


文件下载示例

在此,我们使用HttpServletResponse返回一张照片给客户端,请看如下示例:

/**
 * 本文作者:谷哥的小弟
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
package cn.com;

import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestResponsePhoto extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String path=getServletContext().getRealPath("/WEB-INF/ZXM.jpg");
        FileInputStream fileInputStream = new FileInputStream(path);
        ServletOutputStream outputStream = response.getOutputStream();
        int len=0;
        byte [] b=new byte[1024];
        while((len=fileInputStream.read(b))!=-1){
            outputStream.write(b, 0, len);
        }
        outputStream.close();
        fileInputStream.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
    }

}

代码解析如下:

  • 得到文件路径,请参见代码第20行
  • 得到文件输入流,请参见代码第21行
  • 从response中获取到ServletOutputStream作为输出流,请参见代码第22行
  • 将图片返回给客户端,请参见代码第23-29行

运行后,效果如下图所示:

嗯哼,看到了吧:浏览器中显示了从服务端获取的我女朋友的照片

但是,如果想让用户下载这张照片该怎么办呢?请看如下示例:

/**
 * 本文作者:谷哥的小弟
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
package cn.com;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownPhoto extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String path=getServletContext().getRealPath("/WEB-INF/zxm.jpg");
        System.out.println("-----------------> path="+path);
        String fileName=path.substring(path.lastIndexOf("\\")+1);
        fileName=URLEncoder.encode(fileName, "UTF-8");
        response.setHeader("content-disposition", "attachment;filename="+fileName);
        response.setHeader("content-type", "image/jpeg");
        FileInputStream fileInputStream = new FileInputStream(path);
        ServletOutputStream outputStream = response.getOutputStream();
        int len=0;
        byte [] b=new byte[1024];
        while((len=fileInputStream.read(b))!=-1){
            outputStream.write(b, 0, len);
        }
        outputStream.close();
        fileInputStream.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        super.doPost(req, resp);
    }

}

代码解析如下:

  • 获取到文件名称,请参见代码第23行
  • 设置Header指示客户端下载文件,请参见代码第24行
  • 利用Header设置响应的内容的类型

嗯哼,待用户输入地址后即可下载对应的文件。

除此以外,我们可利用画笔在内存中创作一张图片BufferedImage然后再返回给客户端;有的网站登录时的验证码正是采用该方式实现的。


参考资料

谷哥的小弟学后台(09)——Servlet(1)

谷哥的小弟学后台(10)——Servlet(2)

谷哥的小弟学后台(11)——Servlet(3)

谷哥的小弟学后台(12)——Servlet(4)

时间: 2024-09-20 06:59:17

后台(28)——文件下载的相关文章

iOS开发系列--网络开发

概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力的.今天就会给大家介绍这部分内容: Web请求和响应 使用代理方法 简化请求方法 图片缓存 扩展--文件分段下载 扩展--文件上传 NSURLSession 数据请求 文件上传 文件下载 会话 UIWebView 浏览器实现 UIWebView与页面交互 网络状态 目 录 Web请求和响应 使用代理

ios网络开发

概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力的.今天就会给大家介绍这部分内容: Web请求和响应 使用代理方法  简化请求方法  图片缓存  扩展--文件分段下载  扩展--文件上传  NSURLSession 数据请求  文件上传  文件下载  会话 UIWebView 浏览器实现  UIWebView与页面交互  网络状态 目 录 Web

jsp java-JSP和Java的Action结合下载文件以后返回jsp页面,能把页面上文件的下载量更新一下吗?

问题描述 JSP和Java的Action结合下载文件以后返回jsp页面,能把页面上文件的下载量更新一下吗? 这边是一个下载按钮,直接下载服务器上的一个pdf格式的文件,下载以后数据库里面的下载量会增加.但是页面上显示的下载量没有增加,有没有办法让后台在文件下载完成以后给前台返回一个信息,然后前台根据信息去刷新页面? 注释:用异步请求肯定是不行的,因为用Ajax异步请求的话,文件不能下载! 求高手指点!不好意思!刚注册的用户还没有搞明白我们这边的C币是怎么来的!希望高手不要介意! 解决方案 下载完

jQuery中选择器的基础使用教程_jquery

其实选择器就像开罐器一样,会用这个工具的人,自然吃的到甜头,但不会用这个工具的人,不管罐头里面的面筋土豆有多美味,吃不到就是吃不到,就如同jquery再怎么强大,也只能看着荧幕,而不知该如何下手,不过虽然选择器不难,也容易上手,但老实说,我用了一年多下来,还是觉得自己只有用皮毛而已,所以希望藉着这一系列的笔记,让自己能更长进一些DOM怎么吃DOM可以说是JavaScript与网页之间的联系管道,他提供了一个模型,让JavaScript能藉由此模型来改变或操作整个网页, <div class=&quo

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(28)-系统小结

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(28)-系统小结 我们从第一节搭建框架开始直到二十七节,权限管理已经告一段落,相信很多有跟上来的园友,已经搭配完成了,并能从模块创建授权分配和开发功能了 我没有发布所有源代码,但在14节发布了最后的一次源代码,之后的文章代码是完整的. 注:以后不会发布打包的源代码,我发布文章是献给想学习MVC的朋友,并不是共享结果的源代码,请大家不要再找我要 我们采用VS2012+MVC4+EF5+Unity(IOC)

Facebook将于2017年1月28日关闭移动后台开发云服务Parse

Facebook 今天宣布,公司将于 2017年1月28日 关闭旗下的移动后台开发云服务(MBaaS)Parse. Facebook Parse 的 CTO Kevin Lacker 在博客上这样写道:"我们很荣幸很帮助这么多开发者开发这么多优秀的移动应用,不过我们今后需要将有限的精力投入到其它事情上了." 2013年,Parse 被 Facebook 以 8500 万美元的价格收购.Facebook 如今决定关闭 Parse 服务还是非常令人惊讶的,因为 Facebook 一直在更新

servlet在后台文件下载后打算刷新页面报错

问题描述 response.addHeader("Content-Disposition","attachment;filename="+newString(filename.getBytes()));OutputStreamout=newBufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");....

struts2的文件上传和文件下载

实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致  <input type="file" name="file1"/>        private File file1;   (2)限制上传文件大小和类型的格式是定死的,最好记住,记不住知道去哪里查:虽然不做要求,完全懂框架内部的机制,但是找一些东西还是需要能找到的,这样你可以很好的实现一些功能,因为这些关键字都是框架底层定义好的,图一是找到配

使用springMVC实现文件上传和下载之文件下载

接上一篇,文件下载需要获取下载文件的存储路径,这里只是手动填入,如果是在具体项目中,可以把文件名和上传后的存储路径保存在数据库中.然后增加一个文件列表的页面展示文件名和文件路径,然后点击下载的时候把相应的文件名和路径传到后台操作. [java] view plain copy   /**       * 文件下载,需要文件名和文件地址       *       * @author:tuzongxun       * @Title: download       * @param@param n