`

直接让浏览器下载文件而不打开

JSP 
阅读更多

直接让客户端浏览器下载已知类型(*.doc)的文件  ,而不使用关联程序打开。
   
    Web开发人员都有过这样的疑问,如何让一个文件,尤其是一个已知类型的文件(*.doc),发送到客户端,直接提示让浏览者下载,而不是用与它相关联的程序打开。

    以前我们最常用的办法就是把这样的文件加到链接上,这样可以让浏览者通过点击鼠标右键的目标另存为来下载所链接的文件。但是,这样有两个不足的地方:  
    一是:如果浏览器能够识别已下载文件的扩展名,则浏览器就会激活该扩展名所关联的程序来打开所下载的文件。比如:在Windows平台上,如果用户点击的链接链接的是一个“.doc”文件的话,那么,浏览器就会启动Microsoft   Word应用程序来打开它。  
    二是:如果采用链接的办法的话,任何能看到该链接的人都可以下载该文件,你虽然也可以对所下载的文件进行权限设置,但那样做也不是很方便的。有时候我们需要更为灵活和富有弹性的方式,下面的程序能够很方便地克服以上两方面的不足。  
    这种办法是可靠的,但你必须记住:没有授权的用户不能够通过在浏览器地址栏里输入文件的URL来取得该文件的下载权。所以,要下载的文件应该放到虚拟目录之外的一个目录里,比如:如果你的虚拟目录是C:\Mengxianhui\Tomcat4\Website\MyApp的话,那么,存放在该目录和该目录下的任何子目录下所有文件对因特网上的任何用户都是可见的。

    要直接下载一个文件,我们需要做两件事,

   第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关。

   第二件事是:设置HTTP的响应头名字为:Content-Disposition,设定值为:attachment;   filename   =   theFileName。这里的theFileName就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。

 

下面,我们就平常最常用的JSP和ASP页面来举一个实际应用的例子。  
     
      download.JSP页面的例子:

      <%  
      //   得到文件名字和路径  
      String   filename   =   "MengxianhuiDocTest.doc";  
      String   filepath   =   "D:\\";  
       
      //   设置响应头和下载保存的文件名  
      response.setContentType("APPLICATION/OCTET-STREAM");  
      response.setHeader("Content-Disposition",  
      "attachment;   filename=\""   +   filename   +   "\"");  
     
      //   打开指定文件的流信息  
      java.io.FileInputStream   fileInputStream   =  
        new   java.io.FileInputStream(filepath   +   filename);  
         
      //   写出流信息  
      int   i;  
      while   ((i=fileInputStream.read())   !=   -1)   {  
        out.write(i);  
      }  
      fileInputStream.close();  
      out.close();  
    %>   
 

下载时被显示的文件名包含中文时,要编码
String filename=new String("手册.pdf".getBytes("GBK"),"8859_1");

 

如果使用了Struts 2,可以参看:

Struts2 通过"流"下载文件时显示中文文件名

 

分享到:
评论
5 楼 leo_soul 2015-09-30  
leo_soul 写道
如果走的是静态文件服务器呢?中间不会经过 应用服务器,不写你这种java代码。

自问自答吧,如果走的静态服务器。中间有nginx之类的反向代理,可以修改其response,从而修改mime类型,另外我记得好像还有一种通过js控制的方法,回头有机会再查查吧。
4 楼 leo_soul 2015-09-30  
烧饼烧烧 写道
您好,我也是下载excel,可是总是直接打开,不是下载。怎么回事呢

mime类型改一下,你去查查,有个application-什么的,表示当前是程序,就不会打开而是下载了。
3 楼 烧饼烧烧 2015-08-15  
您好,我也是下载excel,可是总是直接打开,不是下载。怎么回事呢
2 楼 leo_soul 2015-08-14  
如果走的是静态文件服务器呢?中间不会经过 应用服务器,不写你这种java代码。
1 楼 wh8766 2009-03-15  
继续收藏了~
很实用~

相关推荐

    js打开浏览器文件下载框

    在JavaScript(JS)中,实现浏览器文件下载功能是常见的需求,尤其在开发Web应用时。本文将深入探讨如何使用JS来打开浏览器的文件下载框,让用户能够选择并下载服务器上的文件。首先,我们需要理解浏览器的安全策略...

    Java Servlet实现在浏览器中打开pdf文件

    如果想让用户下载而非直接打开,可以将"inline"改为"attachment"。 2. 接下来,我们需要在`web.xml`配置文件中注册这个Servlet: ```xml ... &lt;servlet-name&gt;FileDownloadServlet &lt;servlet-class&gt;...

    C# 下载不在浏览器打开

    "C# 下载不在浏览器打开"这个主题主要关注如何让用户下载文件时,文件不通过浏览器直接打开,而是保存到本地。这通常涉及到HTTP响应头的设置,以及如何触发浏览器的下载行为。以下是对这个主题的详细阐述: 1. **...

    在页面用js调用后台方法,打开doc文件到浏览器

    - **HTTP头部设置**:如设置`Content-Disposition`为`inline`,确保文件在浏览器内打开而不是被下载。 综上所述,实现“在页面用js调用后台方法,打开doc文件到浏览器”涉及到前端JavaScript与后端服务器的交互、...

    JS端基于download.js实现图片、视频时直接下载而不是打开预览

    通过以上方法,你可以确保无论图片、视频还是其他文件,点击下载按钮时都会直接触发下载,而不会被浏览器预览。这种方式在某些情况下特别有用,比如你希望用户明确地下载文件,而不是默认预览。

    微信跳转浏览器下载APP,打开网页实现代码.rar

    首先,我们需要理解微信的内置浏览器并不支持直接下载APK文件,为了绕过这一限制,我们可以采用以下策略: 1. **生成微信跳转链接**:创建一个专门用于跳转的网页,该网页包含一个指向APK下载地址的链接。当用户...

    win7解决IE下载excel时直接在IE浏览器中打开

    标题中的“win7解决IE下载excel时直接在IE浏览器中打开”指的是Windows 7操作系统中,用户在使用Internet Explorer(IE)浏览器下载Excel文件时,系统可能会默认直接在浏览器内打开,而不是保存到本地。这可能导致...

    微信下载APP跳转到浏览器页面,遮罩层提示,浏览器下载APP逻辑

    如果不符,微信会阻止直接下载,并引导用户通过更为安全的浏览器进行下载,以确保用户在知情的情况下进行操作。 接着,跳转到浏览器页面的过程中,为了保持良好的用户体验,通常会显示一个遮罩层提示。这个提示信息...

    Ghost 浏览器 ghost 文件浏览器

    2. **数据提取**:如果需要从.GHO文件中恢复某个单独的文件或文件夹,Ghost浏览器允许用户直接提取出来,而无需恢复整个映像。这对于部分数据恢复需求非常实用。 3. **编辑操作**:在某些情况下,用户可能需要修改....

    微信跳转到浏览器下载APP实现代码

    微信内置的浏览器(X5内核)为了用户体验和安全考虑,通常不允许直接下载APK文件。但我们可以利用一个中间页面(通常为HTML),通过JavaScript来引导用户跳出微信,进入系统浏览器完成下载。 2. **HTML页面(test....

    取消支持浏览器内直接打开文档

    取消支持浏览器内直接打开文档,而非调用对用程序打开的脚本

    PHP实现浏览器访问地址栏下载文件功能 PHP输出文件内容到网页,可浏览可下载.zip

    filename=filename.ext`,浏览器将知道这是一个附件,应当被下载,而不是在当前页面中显示。`filename`参数是用户看到的下载文件名。 现在让我们看看`getpdf.php`可能的实现。在该文件中,PHP代码可能如下: ```...

    PDF浏览器 打开PDF格式的文件

    1. **查看PDF**:用户可以通过PDF浏览器打开并查看任何PDF文件,无论是简单的文本文档还是包含图像、表格、超链接的复杂文件。它们通常提供页面缩放、平移、书签导航以及全屏模式等功能,以优化阅读体验。 2. **...

    pdf浏览器 打开浏览pdf文件

    "绿色"通常意味着这款软件无需安装,下载后即可直接运行,不向系统注册表写入信息,不会留下冗余文件,易于管理和携带。"小巧"则意味着它的体积小,占用硬盘空间少,同时启动和运行速度快,对系统资源的需求较低。 ...

    微信中点击按钮弹出在外部浏览器打开的提示代码

    在微信环境中,通常为了安全和用户体验,用户不能直接在微信内置浏览器中打开外部链接,而是需要引导用户通过外部浏览器来访问。本知识点主要探讨如何在微信中实现点击按钮后提示用户在外部浏览器打开链接的代码实践...

    ASP TXT WORD 文件下载在本地而不是在浏览器中打开

    ### ASP TXT WORD 文件下载在本地而不是在浏览器...通过上述步骤,我们可以有效地实现在ASP环境中让用户下载TXT或Word文件等功能,而非直接在浏览器中打开。这不仅提高了用户体验,还保证了文件格式的一致性和完整性。

    Re安卓文件浏览器

    但"Re安卓文件浏览器"允许用户直接打开这些数据库文件,这对于开发者调试应用或者普通用户查看、备份数据非常有帮助。它可能还支持一些基本的查询和编辑功能,使得用户无需电脑即可对数据库进行简单操作。 此外,...

    OPERA9.1浏览器绿色单文件版,可在PE下使用的浏览器

    1. **无需安装**:Opera 9.1绿色单文件版可以直接运行,无需在电脑上进行安装过程,避免了对注册表的修改和系统文件的占用。 2. **跨平台**:因为是便携版,用户可以在不同的Windows系统上使用,兼容性良好。 3. *...

    判断是否微信打开,提示在右上角浏览器中打开。

    刚做好的,带了一整套,包括图片和代码。分享给大家。不懂的可以留言。支持web,手机端。...再也不用管微信如何的更新,直接判断如果是在微信中打开,然后弹出一个遮罩提示用户在浏览器中打开下载。

    .IOS通过手机浏览器打开指定APP

    如果不能,则会跳转到iTunes的下载页面。 这些知识点对于iOS应用开发者在实现APP间通讯、自定义URL打开和推广自己的APP等方面都具有指导意义。开发者能够利用这些技术来增强自己APP的集成能力,提升用户体验,并...

Global site tag (gtag.js) - Google Analytics