|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,js|把持|下载出自孟宪会年夜年夜的blog
Web开辟职员都有过如许的疑问,怎样让一个文件,特别是一个已知范例的文件,发送到客户端,间接提醒让扫瞄者下载,而不是用与它相干联的程序翻开。之前我们最经常使用的举措就是把如许的文件加到链接上,如许可让扫瞄者经由过程点击鼠标右键的方针另存为来下载所链接的文件。可是,如许有两个不敷的中央:
一是:假如扫瞄器可以辨认已下载文件的扩大名,则扫瞄器就会激该死扩大名所联系关系的程序来翻开所下载的文件。好比:在Windows平台上,假如用户点击的链接链接的是一个“.doc”文件的话,那末,扫瞄器就会启动MicrosoftWord使用程序来翻开它。
二是:假如接纳链接的举措的话,任何能看到该链接的人都能够下载该文件,你固然也能够对所下载的文件举行权限设置,但那样做也不是很便利的。偶然候我们必要更加天真和富有弹性的体例,上面的程序可以很便利地克制以上两方面的不敷。
这类举措是牢靠的,但你必需记着:没有受权的用户不克不及够经由过程在扫瞄器地点栏里输出文件的URL来获得该文件的下载权。以是,要下载的文件应当放到假造目次以外的一个目次里,好比:假如你的假造目次是C:MengxianhuiTomcat4WebsiteMyApp的话,那末,寄存在该目次和该目次下的任何子目次下一切文件对因特网上的任何用户都是可见的。要间接下载一个文件,我们必要做两件事,第一件事是:设定呼应的内容类为“application/octet-stream”,巨细写有关。第二件事是:设置HTTP的呼应头名字为:Content-Disposition,设定值为:attachment;filename=theFileName。这里的theFileName就是呈现在文件下载对话框里的默许文件名,一般和所下载的文件名字不异,但也能够分歧。上面,我们就寻常最经常使用的JSP和ASP页面来举一个实践使用的例子。
TestFileDownload.JSP页面的例子:
<%
//失掉文件名字和路径
Stringfilename="MengxianhuiDocTest.doc";
Stringfilepath="D:";
//设置呼应头和下载保留的文件名
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition",
"attachment;filename=""+filename+""");
//翻开指定文件的流信息
java.io.FileInputStreamfileInputStream=
newjava.io.FileInputStream(filepath+filename);
//写出流信息
inti;
while((i=fileInputStream.read())!=-1){
out.write(i);
}
fileInputStream.close();
out.close();
%>
值得注重的是:在你要下载的文件内容里,除文件的内容以外,不该该再附加有别的任何的字符,包含空格和回车换行符。我们偶然在编写代码的时分,为了使代码明晰可读,常常会增加一些空格、制表符大概回车换行符,如许固然看起来对照明晰,但偶然大概会得不到准确的了局。好比:
<%@pageimport="java.io.*"
%><jsp:useBeanid="MyBeanFromMengxianhui"scope="page"
class="com.Mengxianhui.DownloadBean"/>
应当写成如许:
<%@pageimport="java.io.*"
%><jsp:useBeanid="MyBeanFromMengxianhui"scope="page"
class="com.Mengxianhui.DownloadBean"/>
TestFileDownload.ASP页面的例子:
在ASP里,没有供应从文件读取文件流信息的办法,因而,为了失掉文件的流信息,我们必需借助其他的工具,最复杂的就是编写一个VB或C的DLL组件,让组件前往文件的流信息。上面是一个用VB编写的DLL的例子,工程名字为MengXHFileDownLoad,类模块的名字为BinReadFromFile,类办法readBinFromFile以下:
FunctionreadBinFromFile(ByValbfilenameAsString)AsVariant
DimflAsLong
DimFileNumAsLong
Dimbinbyte()AsByte
DimbinfilestrAsString
OnErrorGoToerrHandler
FileNum=FreeFile
OpenbfilenameForBinaryAs#FileNum
fl=FileLen(bfilename)
ReDimbinbyte(fl)
Get#FileNum,,binbyte
Close#FileNum
readBinFromFile=binbyte
ExitFunction
errHandler:
ExitFunction
EndFunction
把下面的代码编译成MengXHFileDownLoad.DLL,然后注册便可利用。上面以间接下载一个WhenAManLovesAWoman.mp3的MP3文件为例子,我们要编写的ASP剧本代码以下:
<%@Language=VBScript%>
<%
Response.buffer=TRUE
Response.ContentType="APPLICATION/OCTET-STREAM"
Response.AddHeader"Content-Disposition","attachment;filename=WhenAManLovesAWoman.mp3"
DimvarStream,oMyObject
SetoMyObject=Server.CreateObject("MengXHFileDownLoad.BinReadFromFile")
varStream=oMyObject.readBinFromFile("E:MengXianhuiMp3WhenAManLovesAWoman.mp3")
Response.BinaryWrite(varStream)
SetoMyObject=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"<divstyle=background-color:navy;color:#FFFFFF>测试</div>"
Response.write"<ahref=http://lucky.myrice.com>"
Response.write"<imgsrc=http://lucky.myrice.com/back.jpg>【孟宪会之出色天下】</a>"
Response.End
%>
当我们的文件数量很少时,也能够间接在服务器端举行设置,让这些文件间接下载。详细做法是:在Internet服务办理器里,选“属性”项,然后选“HTTPHeaders”标签页举行设置便可!!
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net, |
|