在做DIY项目的时候,要实现一个下载业务,由于服务器资源有限,所以需要隐藏下载文件地址,在下载的时候还要更改保存文件的名字,比如我保存到服务器的文件名是2008_7_8_xfire.rar ,数据可以中关于该文件还有一个文件描述,比如该文件的描述名字为XFIRE.

在页面,下载连接中该文件的真实地址要隐藏,并且要将2008_7_8_xfire.rar替换成XFIRE.rar,要实现这种操作,可以使用文件转发功能...

步骤如下:

1)调用HttpServletResponse的.setContentType方法设置Content-Type头字段的值为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如:"application/octet-stream"或application/x-msdownload 等
2)通过HttpServletResponse的setHeader方法设置Content-Disposition头的值为“attachment;filename=文件名”

代码如下:

response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment; filename=\""+java.net.URLEncoder.encode("上网DIY.rar", "UTF-8")+"\"");

request.getRequestDispatcher("2008_7_8_diy.rar").forward(request,response);

代码中:filename属性使用了字符转换,这样可以解决下载文件中文名的问题..

上网DIY.rar是我要输出(下载)的文件名,2008_7_8_diy.rar是保存在服务器真实的文件名字.在这里就实现了文件的转发,并且更改文件的下载名字.但是要实现此业务的时候,我还想着通过程序读出文件,然后再输出到客户端来实现名字转换,现在想起来觉得好傻,服务器已经不堪负荷了...(一台服务器放了10几个网站...郁闷...而且此项目还提供大文件的上传...如果用程序输出,我怕系统隔几分钟就死一次了...)....

下面实现动态文件下载--动态文件指该文件实际并不存在,是内存中的数据,然后输出成具体文件:

内容应该当二进制来处理,所以应该调用HttpServletResponse的getOutputStream方法返回的ServletOutputStream对象来向客户端写入文件内容。

代码如下:

response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment;filename=hello.txt");
ServletOutputStream sos=response.getOutputStream();
sos.write("hello kids".getBytes());
sos.close();

输出文件为hello.txt 内容为hello kids

转载于:https://www.cnblogs.com/MakethingsEasy/archive/2012/08/02/2619693.html

通过程序实现文件下载更名,动态文件下载相关推荐

  1. BizTalk 2006 简单入门示例程序(附源项目文件下载)

    BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...

  2. 除去虚拟目录中的旧版本文件(临时文件下载、归档文件下载)

    临时文件下载 严重性:低 CVSS 分数: 5.0 URL: 实体: code (Page) 风险: 可能会下载临时脚本文件,这会泄露应用程序逻辑及其他诸如用户名和密码之类的敏感信息 原因: 在生产环 ...

  3. 高级程序员要有动态调整责权和成员工作状况的能力

    没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求高级程序员能真正评估一个模块的复杂性和工作量.项目组内程序员的水平是有差距的,同时用户需求又在不断变化,高级程序员要 ...

  4. 微信小程序给echarts图表动态赋值

    微信小程序给echarts图表动态赋值 接上一篇:微信小程序引入echart图表 直接上例子(运行需要结合上一篇,拉至文章顶部进入): import * as echarts from '../../ ...

  5. 微信小程序:block制作动态商品列表

    微信小程序:block制作动态商品列表 在制作微信小程序时,我们往往会碰到需要动态生成列表的情况,本文便是以常见的商品列表为例来学习如何利用block制作动态商品列表. 运行截图 实现代码 js: P ...

  6. 微信小程序使用echarts绘画动态图表

    微信小程序使用echarts绘画动态图表 首先我们从官网下载echarts插件,路径是https://github.com/ecomfe/echarts-for-weixin,把echarts文件放到 ...

  7. 前端程序员的浪漫动态告白表白女友源码

    动态告白表白女友源码前端程序员的浪漫,是一款网页动态表白源码,直接点击html看效果,浏览器打开就好了,兄弟们可以上车了. 特别说明: 1.文字在 take.js 里面改 或者 index.html里 ...

  8. 微信小程序之获取后台动态数据表格布局display:table

    微信小程序之获取后台动态数据表格布局display:table 猿来独往 2018-09-02 本文没有采用flex布局和grid布局来设置表格的,而是通过 display: table;来设置. 一 ...

  9. android程序内下载文件,android文件下载代码 android程序 里如何编写下载代码

    android开发文件下载在手机报错 package cc.download; import android.app.Activity;import android.os我比任何人都懂你不会真的陪我到 ...

最新文章

  1. 人类正在进入超级智能时代,论一种新超级智能的崛起
  2. 地平线VarGFaceNet
  3. android 之intent(意图)详解
  4. jquery基本操作笔记
  5. 常用-开发框架【转】
  6. Spark逻辑图的执行
  7. “云”话数字经济:2020 腾讯全球数字生态大会定档 9 月!​
  8. almost a hero 差不多英雄 攻略
  9. .NET框架源码解读之SSCLI编译过程简介
  10. C#编程--ribbon界面介绍
  11. 博士申请 | 香港大学黄凯斌教授招收6G通信与机器学习方向全奖博士生
  12. 集群分布式存储-MFS
  13. 转。WEB前端特效。统计图,3D切换图片,摇号,转盘抽奖
  14. 检测计算机主板是否坏掉,解决办法:如何判断cpu是否坏以及主板是否坏,如何检测主板故障...
  15. 作为管理人员如何处理下属工作的偏差
  16. leetcode 127 单词接龙
  17. Vivado 报错Error:‘launch_simulation‘failed due to earlier errors.
  18. 机器学习6-多分类学习器拆分策略
  19. 共享经济时代下如此多的“美食平台”,为什么它成功的生存下来了
  20. AutoCAD2014打开一闪而过解决方法

热门文章

  1. SQL Server游标
  2. failed to load kernel library!处理办法
  3. java 正则 关键字_正则表达式关键字
  4. Adobe Acrobat Pro DC二次激活失败的解决方案
  5. PostgreSQL12主从流复制(一主两从)
  6. Python数据结构:选择排序
  7. python bool 转vc int_史上最全的 Python 3 类型转换指南
  8. linux 安装监控系统,CentOS7安装性能监控系统
  9. android开发所遇问题集(一)----Mr.Zhang
  10. oracle mysql增量迁移_从自建Oracle迁移至RDS MySQL