当前位置:  技术问答>java相关

文件下载问题,如何参会出现“另存为“对话框?

    来源: 互联网  发布时间:2015-09-30

    本文导语:  谢谢!能不能给出一个原码,例子; | Web开发人员都有过这样的疑问,如何让一个文件,尤其是一个已知类型的文件,发送到客户端,直接提示让浏览者下载,而不是用与它相关联的程序打开。以前我们...

谢谢!能不能给出一个原码,例子;

|
Web开发人员都有过这样的疑问,如何让一个文件,尤其是一个已知类型的文件,发送到客户端,直接提示让浏览者下载,而不是用与它相关联的程序打开。以前我们最常用的办法就是把这样的文件加到链接上,这样可以让浏览者通过点击鼠标右键的目标另存为来下载所链接的文件。但是,这样有两个不足的地方:
一是:如果浏览器能够识别已下载文件的扩展名,则浏览器就会激活该扩展名所关联的程序来打开所下载的文件。比如:在Windows平台上,如果用户点击的链接链接的是一个“.doc”文件的话,那么,浏览器就会启动Microsoft Word应用程序来打开它。
二是:如果采用链接的办法的话,任何能看到该链接的人都可以下载该文件,你虽然也可以对所下载的文件进行权限设置,但那样做也不是很方便的。有时候我们需要更为灵活和富有弹性的方式,下面的程序能够很方便地克服以上两方面的不足。
这种办法是可靠的,但你必须记住:没有授权的用户不能够通过在浏览器地址栏里输入文件的URL来取得该文件的下载权。所以,要下载的文件应该放到虚拟目录之外的一个目录里,比如:如果你的虚拟目录是C:MengxianhuiTomcat4WebsiteMyApp的话,那么,存放在该目录和该目录下的任何子目录下所有文件对因特网上的任何用户都是可见的。要直接下载一个文件,我们需要做两件事,第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关。第二件事是:设置HTTP的响应头名字为:Content-Disposition,设定值为:attachment; filename = theFileName。这里的theFileName就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。下面,我们就平常最常用的JSP和ASP页面来举一个实际应用的例子。

TestFileDownload.JSP页面的例子:



值得注意的是:在你要下载的文件内容里,除了文件的内容之外,不应该再附加有其它任何的字符,包括空格和回车换行符。我们有时在编写代码的时候,为了使代码清晰可读,往往会添加一些空格、制表符或者回车换行符,这样虽然看起来比较清晰,但有时可能会得不到正确的结果。比如:
 
应该写成这样:


TestFileDownload.ASP页面的例子:

在ASP里,没有提供从文件读取文件流信息的方法,因此,为了得到文件的流信息,我们必须借助其他的工具,最简单的就是编写一个VB或C的DLL组件,让组件返回文件的流信息。下面是一个用VB编写的DLL的例子,工程名字为MengXHFileDownLoad,类模块的名字为BinReadFromFile,类方法readBinFromFile如下:

Function readBinFromFile(ByVal bfilename As String) As Variant
   Dim fl As Long
   Dim FileNum As Long
   Dim binbyte() As Byte
   Dim binfilestr As String
   
   On Error GoTo errHandler   
   FileNum = FreeFile   
   Open bfilename For Binary As #FileNum   
   fl = FileLen(bfilename)
   ReDim binbyte(fl)   
   Get #FileNum, , binbyte   
   Close #FileNum   
   readBinFromFile = binbyte
   Exit Function
     
errHandler:
   Exit Function
End Function

把上面的代码编译成MengXHFileDownLoad.DLL,然后注册即可使用。下面以直接下载一个When A Man Loves A Woman.mp3的MP3文件为例子,我们要编写的ASP脚本代码如下:




当我们运行上面的TestFileDownload.ASP文件时,浏览器会弹出一个文件下载的对话框,提示我们下载,而不是用默认的MP3播放器打开。
这种方法也可以把我们的ASP页面生成的HTML源代码保存成一个文件,下面的代码会提示你把ASP执行的结果保存成Test.htm文件。具体的方法是:

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 请问高手,有没有办法可以控制文件的下载?下载文件,一般通过地址链直接链接过去就可以下载,但有些文件是要某种条件下才可以让客户下载,如
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 求救:谁有从服务器下载文件(一次下载一个文件就可以)的class 文件或着着方面的信息吗?90分必送
  • jsp做下载文件,(如rar文件)为什么下载后,无法打开?
  • 怎样让下载直接打开.exe文件 或者 .chm文件。 而不是变成下载框
  • php实现文件下载简单示例(代码实现文件下载)
  • 怎么有的.tar.gz等压缩文件下载后,打开出错,我明明下载完了的啊!
  • 请问如何使客户端浏览器一定下载某个文件,而不是打开该文件(哪怕这个文件是HTML或JPG)?
  • php文件下载代码(多浏览器兼容、支持中文文件名)
  • nginx中文件下载指定保存文件名的配置方法
  • php文件下载(防止中文文件名乱码)的示例代码
  • jQuery文件下载插件 Downloadr
  • Web文件下载 myfiles
  • jQuery文件下载插件 jDownload
  • 下载了redhat,如何将iso文件变成光盘文件??
  • 文件下载管理器 uGet
  • 那里有FREEBSD下载,需要下载那些文件?
  • 文件下载!
  • 在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)
  • 文件下载服务器 Open Upload


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3