首页 > java 下载文件功能代码例子

java 下载文件功能代码例子

public static void down(HttpServletRequest request,

   HttpServletResponse response) throws Exception {

  

  

  String name="aaa.*";//文件名

  String uploadPath = UploadFileHelper.getRepositoryPath()+"//";//文件来源

    

   String filePath = name;

  String fileName = name;

  

  

  if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){

   fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");//firefox浏览器

  }else {

       if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0){

        fileName = URLEncoder.encode(fileName, "UTF-8");//IE浏览器

       }

  }  

  response.setContentType("text/plain");

  response.setHeader("Location",fileName);

  response.reset();

  response.setHeader("Cache-Control", "max-age=0" );

  response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

 BufferedInputStream bis = null;

  BufferedOutputStream bos = null;

  OutputStream fos = null;

  InputStream fis = null;

  filePath = uploadPath + filePath;

  fis = new FileInputStream(filePath);

     bis = new BufferedInputStream(fis);

     fos = response.getOutputStream();

     bos = new BufferedOutputStream(fos);

int bytesRead = 0;

     byte[] buffer = new byte[5 * 1024];

     while ((bytesRead = bis.read(buffer)) != -1) {

         bos.write(buffer, 0, bytesRead);// 将文件发送到客户端

     }

     bos.close();

     bis.close();

     fos.close();

     fis.close();

    

 }

转载于:https://www.cnblogs.com/sand-tiny/p/4284450.html

更多相关:

  • head 看文件的前100行head -100  filename   tail/tailf查看文件的后100行tail -100  filename 或 tail -n 100  filename tailf filename == tail -f filename   sed sed -n '100,200p' filename...

  • 1.Scatter  从一个Channel读取的信息分散到N个缓冲区中(Buufer). 2.Gather  将N个Buffer里面内容按照顺序发送到一个Channel.       Scatter/Gather功能是通道(Channel)提供的  并不是Buffer, Scatter/Gather相关接口 类图     Re...

  • 你可能看到了表的前缀非常奇怪。Joomla将替换这个前缀,用安装时候指定的内容。对于通常的安装,这个表名将是jos_hello,这样可以多个安装使用一个数据库,并且能够避免表名冲突。 表中有两个字段,一是id,是主键,一是greeting. 以上内容保存在 install.utf.sql. 创建卸载sql文件 尽管我们希望永远不必...

  • importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;//结果与DES算...

  • 题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...

  • 在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...

  • Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...

  • 使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...