`
jeff312
  • 浏览: 77307 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

Web小经验:使用Servlet实现文件下载的时候,避免浏览器自动打开文件

    博客分类:
  • J2EE
阅读更多
遇到这个问题的人很多,大致情形如下:
1. 客户端向servlet请求一个 .xls 文件的下载;
2. servlet正确响应,向客户端提供一个输出流;
3. 客户端浏览器接收输出流,自动调用Office-Excel软件的浏览器插件在浏览器窗口里直接打开这个.xls 文件,用户无法控制“另存为”。

网上搜了很多帖子和文章,基本都没有说到点子上。有人就此提问,下面跟帖的就七嘴八舌地争论应该set什么content-type,也就是response.setContentType("xxx");。其实这些都是没用的,无论xxx设成什么,浏览器想怎么干还是怎么干,关键在哪儿呢?这是我找到的一个帖子,楼主遇到同样的问题并已经给出了正确的代码,但显然他并不清楚到底正确在哪里,属于典型瞎猫撞到死耗子:
http://www.cjsdn.net/post/view?bid=2&id=5367&sty=3&tpg=127&age=0
关键在哪里呢?请注意这一行:
response.addHeader("Content-Disposition", "attachment; filename=" + response.encodeURL(downloadfile));

注意到第一个值项是attachment,这是真正的关键,设定了这个值,浏览器就会老老实实地显示另存为对话框,如果这个值设成inline,则无论怎样浏览器都会自动尝试用已知关联的程序打开文件。
分享到:
评论
10 楼 jeff312 2009-10-23  
朗拿颠老 写道
这个用过,不过没试过当文件一大性能如何


这年头,叫“朗拿”的都会踢球呵呵,大朗拿小朗拿小小朗拿都是“先生”哇。

大文件没试过,目前没用到,不过关于断点下载还是有很多文章可以参考的。
9 楼 daoger 2009-10-23  
无语   !
8 楼 lixjluck 2009-10-23  
还要注意downloadfile下载文件名过长的问题
如果过长,浏览器会自动截断变成了乱码了
google是这样处理的:这种情况下,把文件压缩一个包,然后下载这个压缩包。
7 楼 贫嘴男孩 2009-10-23  
用rails就简单了
6 楼 朗拿颠老 2009-10-23  
这个用过,不过没试过当文件一大性能如何
5 楼 cn-done 2009-10-22  
收益非浅。不晓得怎么屏蔽自动弹出下载工具哦
貌似有些网站就自动屏蔽了下载工具,直接弹出另存为对话框。
4 楼 wangcgen 2009-10-22  
还有一种方法,把浏览器的 execel 插件屏蔽,就可以弹出 另存为 对话框了
3 楼 zhishuren 2009-10-21  
呵呵 我一直使用的是 attachment
2 楼 whaosoft 2009-10-21  
这个没试过,改天试一下
1 楼 ningmenglovesoft 2009-10-19  
谢谢了,楼主。

相关推荐

    JasperReport+Servlet Web应用之:打印预览

    - 客户端浏览器接收到响应后,通常会自动打开一个新窗口或标签页显示PDF,用户可以进行预览和打印操作。 4. **MyJasperReportWebPrint项目结构** - 该项目可能包含以下关键部分: - `web.xml`配置文件:定义...

    servlet文件上传和下载

    总结,Servlet文件上传和下载是Java Web开发中必不可少的功能。理解和熟练掌握这些技术,有助于构建更健壮、安全的Web应用程序。在实际应用中,结合最佳实践和安全措施,可以确保系统的稳定性和用户数据的安全。

    自动生成静态网页技术+servlet实现

    在IT行业中,自动生成静态网页技术与Servlet的结合使用是一种高效的方法,特别是在处理高并发访问和提高网站性能时。Servlet是Java服务器端编程的一个重要组件,它允许开发者创建动态、交互式的Web应用。本篇文章将...

    Java代买实现文件上传下载

    2. **设置响应头**:在Servlet中,使用`HttpServletResponse`设置响应头,包括Content-Disposition(指定文件名,浏览器将自动弹出保存对话框),Content-Type(指定文件的MIME类型)和Content-Length(文件大小)。...

    web浏览器播放http-flv协议的视频流

    HTTP-FLV协议允许服务器推送视频流到客户端,如Web浏览器中的Flash Player插件,实现实时传输,而无需用户进行任何下载操作。 二、Tomcat服务器 Tomcat是一个开源的、基于Java的Web应用服务器,广泛用于小型到中型...

    Struts文件上传 下载 打开(不用jar包)

    5. **触发下载**:客户端接收到响应后,浏览器会自动触发文件下载。 **文件打开** 文件打开通常涉及在服务器端或客户端打开一个文件。在Struts中,这可能需要使用重定向或JavaScript来实现: 1. **服务器端打开**...

    Ajax+servlet实现搜索提示列表效果

    在Java Web开发中,"Ajax + Servlet 实现搜索提示列表效果"是一个常见的需求,它能够提升用户在输入查询时的体验。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页...

    jspsmart实现文件上传下载及jspSmartUploadjar下载文库.pdf

    2. **设置Content-Disposition**:为了避免浏览器自动打开文件,你可以设置`setContentDisposition(null)`,这样文件将以下载方式提供给用户。 ```java su.setContentDisposition(null); ``` 3. **下载文件**:...

    Java Web登录自动填入用户名密码

    在Java Web开发中,实现一个具有“记住我”功能的登录页面是一项常见的需求。这个功能允许用户在选择“记住用户名和密码”后,下一次访问网站时,系统能自动填充登录表单,提供便捷的用户体验。这个过程涉及到浏览器...

    用户信息系统(Servlet和JSP实现).docx

    为了避免每次修改Servlet代码后都需要重启Tomcat服务器,可以通过修改`context.xml`文件来实现自动部署更新。具体操作步骤如下: 1. 打开Tomcat安装目录下的`conf/context.xml`文件。 2. 在`<Context>`标签内添加`...

    servlet中文乱码问题

    - 这样设置后,浏览器将自动使用GBK编码来解码URL中的中文字符,从而避免乱码问题。 - **验证方法**:更改前,在IE浏览器中,选择“查看 | 编码”,可以看到“西欧(ISO)”被选中;更改后,“简体中文(GB2312)”将...

    jsp上传与下载

    2. 设置响应头:在Servlet或JSP中,使用`HttpServletResponse`设置响应头,包括`Content-Type`(文件类型)、`Content-Disposition`(定义如何打开文件,通常为"attachment; filename=文件名",提示浏览器以附件形式...

    动态网页(JSP+Servlet)教程

    - **自动部署**: 使用 Eclipse 或其他 IDE 自动部署应用。 **2.5 总结** Tomcat 作为一款轻量级的 Java Web 服务器,不仅安装配置简单,而且具有良好的性能和稳定性,是学习和开发 JSP 和 Servlet 的理想选择。 #...

    java的上传下载

    2. **读取文件**:使用`FileInputStream`打开文件并读取其内容,然后通过`ServletOutputStream`写入HTTP响应的输出流。 3. **响应发送**:完成文件读取后,发送响应,客户端会自动开始下载。 在描述中提到的"一个...

    springMVC 上传下载例子

    - **读取文件**:使用`FileInputStream`打开文件并读取其内容,然后将其写入到`HttpServletResponse`的输出流中。 - **断点续传**:为了支持断点续传,需要在HTTP头中添加`Accept-Ranges`和`Content-Length`信息,...

    java编写上传下载代码

    在Java编程中,实现文件的上传与下载是常见的需求,特别是在Web应用中。Struts是一个流行的MVC(Model-View-Controller)框架,它为Java应用程序提供了强大的控制层支持。本篇文章将深入探讨如何利用Java和Struts...

    word__xls文件导出

    - `Content-Disposition`用于指示浏览器如何处理响应数据,`attachment`表示应提示用户下载文件,而`inline`则表示应在浏览器内直接打开文件。 ### 三、导出word文件 在导出word文件时,除了设置正确的`Content-...

    Netbeans培训.ppt

    - 浏览器自动打开,显示项目首页。 #### 四、数据库操作 - **配置 MySQL 服务器**: - 安装 MySQL Server。 - 设置 MySQL 服务属性,如端口号等。 - **启动 MySQL 服务器**: - 使用命令行工具启动 MySQL 服务...

    tomcat8.0服务容器

    作为一款轻量级应用服务器,Tomcat8.0在性能和稳定性上都有显著提升,并且它是Servlet、JSP和Java EE Web应用程序的标准实现。 【描述】:“tomcat容器,8.0.51版本 windows使用tomcat容器,8.0.51版本 windows使用...

    cookie 实现显示商品的浏览的历史记录

    - **定义**:Cookie是由服务器端发送到浏览器的一小段文本信息,浏览器在后续请求中会自动携带回服务器。 - **用途**:主要用于保持用户的登录状态、存储用户设置、跟踪浏览行为等。 - **生命周期**:默认情况下...

Global site tag (gtag.js) - Google Analytics