首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统-> Solaris教程
使用JSP对文件下载的控制-JSP教程,Jsp/Servlet
作者:网友供稿 点击:1175
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
出自孟宪会大大的blog
web开发人员都有过这样的疑问,如何让一个文件,尤其是一个已知类型的文件,发送到客户端,直接提示让浏览者下载,而不是用与它相关联的程序打开。以前我们最常用的办法就是把这样的文件加到链接上,这样可以让浏览者通过点击鼠标右键的目标另存为来下载所链接的文件。但是,这样有两个不足的地方:
一是:如果浏览器能够识别已下载文件的扩展名,则浏览器就会激活该扩展名所关联的程序来打开所下载的文件。比如:在windows平台上,如果用户点击的链接链接的是一个“.doc”文件的话,那么,浏览器就会启动microsoft word应用程序来打开它。
二是:如果采用链接的办法的话,任何能看到该链接的人都可以下载该文件,你虽然也可以对所下载的文件进行权限设置,但那样做也不是很方便的。有时候我们需要更为灵活和富有弹性的方式,下面的程序能够很方便地克服以上两方面的不足。
这种办法是可靠的,但你必须记住:没有授权的用户不能够通过在浏览器地址栏里输入文件的url来取得该文件的下载权。所以,要下载的文件应该放到虚拟目录之外的一个目录里,比如:如果你的虚拟目录是c:\mengxianhui\tomcat4\website\myapp的话,那么,存放在该目录和该目录下的任何子目录下所有文件对因特网上的任何用户都是可见的。要直接下载一个文件,我们需要做两件事,第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关。第二件事是:设置http的响应头名字为:content-disposition,设定值为:attachment; filename = thefilename。这里的thefilename就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。下面,我们就平常最常用的jsp和asp页面来举一个实际应用的例子。

testfiledownload.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();
%>

值得注意的是:在你要下载的文件内容里,除了文件的内容之外,不应该再附加有其它任何的字符,包括空格和回车换行符。我们有时在编写代码的时候,为了使代码清晰可读,往往会添加一些空格、制表符或者回车换行符,这样虽然看起来比较清晰,但有时可能会得不到正确的结果。比如:
<%@ page import="java.io.*"
%> <jsp:usebean id="mybeanfrommengxianhui" scope="page"
class="com.mengxianhui.downloadbean" />
应该写成这样:
<%@ page import="java.io.*"
%><jsp:usebean id="mybeanfrommengxianhui" scope="page"
class="com.mengxianhui.downloadbean" />

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脚本代码如下:

<%@ language=vbscript %>
<%
response.buffer = true
response.contenttype = "application/octet-stream"
response.addheader "content-disposition","attachment;filename=when a man loves a woman.mp3"

dim varstream, omyobject

set omyobject = server.createobject("mengxhfiledownload.binreadfromfile")
varstream = omyobject.readbinfromfile("e:\mengxianhui\mp3\when a man loves a woman.mp3")
response.binarywrite(varstream)
set omyobject = nothing

response.end
%>

当我们运行上面的testfiledownload.asp文件时,浏览器会弹出一个文件下载的对话框,提示我们下载,而不是用默认的mp3播放器打开。
这种方法也可以把我们的asp页面生成的html源代码保存成一个文件,下面的代码会提示你把asp执行的结果保存成test.htm文件。具体的方法是:
<%
response.contenttype = "application/octet-stream"
response.addheader "content-disposition","attachment;filename=test.htm"
response.write "<div style=background-color:navy;color:#ffffff>测试</div>"
response.write "<a href=http://lucky.myrice.com>"
response.write "<img src=http://lucky.myrice.com/back.jpg>【孟宪会之精彩世界】</a>"
response.end
%>

当我们的文件数目很少时,也可以直接在服务器端进行设置,让这些文件直接下载。具体做法是:在internet服务管理器里,选“属性”项,然后选“http headers”标签页进行设置即可!!



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·使用JSP对文件下载的控制-JSP教程,Jsp/Servlet
·[ASP.net(C#)]XML操作类(一)-.NET教程,C#语言
·java网络五子棋的源代码-JSP教程,Java技巧及代码
·用C#给程序加启动画面并只允许一个应用程序实例运行-.NET教程,C#语言
·.Net平台下开发中文语音应用程序-.NET教程,VB.Net语言
·用java取得本机的ip和机器名-JSP教程,Java技巧及代码
·动力设备环境及图像集中监控管理系统若干新问题——王观坤、刘崇海
·Java下XML编程接口比较:DOM SAX JDOM JAXP-.NET教程,XML应用
·使用Java技术在Cocoon中实现商业逻辑-JSP教程,Java技巧及代码
·[SQL]启动SQLServer的死锁检查-数据库专栏,SQL Server
最新文章
·日一万ip网站 gg月入万刀_网赚技巧
·浅谈cpm、cpc、cpa、pfp网站赚钱说明_网赚技巧
·王通:网站赚钱靠服务、产品和投资三种方式_网赚技巧
·网站的首页最应该放什么?_站长心得
·简洁而不简单:google成功十条真理_google推广
·google排名 如何用关键字优化网站_google推广
·用google adsense渠道跟踪你的广告(新手读)_google推广
·全面了解google 网页目录_google推广
·做完网站别忘调试----网站调试全攻略2_站长心得
·网上开店快乐赚钱-发现潜在商机_站长心得
相关主题
  • 使用jsp完成文件可定制上载-JSP教程,Jsp/Servlet
  • 使用JSP + JAVABEAN + XML 开发的一个例子-JSP教程,Jsp/Servlet
  • 使用JSP + JAVABEAN + XML 开发的一个例子-JSP教程,Jsp/Servlet
  • 使用jsp实现word、excel格式报表打印-JSP教程,Jsp/Servlet
  • 使用JSP读取客户端信息-JSP教程,Jsp/Servlet
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭