ASP跨服务器上传文件完美解决
如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持FSO,那么跨服务器上传文件这个问题就摆在你面前了,下面就是我在解决 里面的跨服务器上传文件的日记,这个问题看似简单,里面的细节问题却是非常有趣
前提条件,空间都必须支持ASP,上传文件的服务器支持FSO,下面的叙述中, 为存上传文件的服务器, 为网站服务器,即显示用户界面的服务器。
。。
实现功能,文件上传,上传后在网页的文本区域自动加上对于图片的UBB码,为了清楚,下面列出所有用到的文件
服务器 文件名 用途
blog_ p 接收上传文件用
blog_ p 添加BLOG,上传文件功能在此出现
blog_ p 上传文件表单,以iframe的形式嵌在blog_ p里
blog_ p 显示上传结果,作善后工作
blog_ p 验证用户名与密码
在发布BLOG页面Blog_ p增加一个iFrame,调用blog_ p进行上传操作
如果你玩过ASP,自然不费吹灰之力想到,文件要传到另外一个服务器上,只要把blog_ p里的上传Form的action页面指向目标服务器就行了,
//中间略去
//提交时把发布BLOG的按纽disable先,以免没传完就时用户把BLOG发表了
测试一下,文件上传成功,那自动加UBB代码呢。
。。
在 里加一句js脚本, lue+=''传上去再测试,错误提示"blog_UPFILE。ASP 权限不够",既然 的文件权限不够, 总可以吧,当blog_ p操作完成时,再调用一个本服务器的ASP文件,于是blog_ p出现了,他负责善后。
修改blog_ p,我用C++的习惯,注释用//符
servername=" " //标志服务器名
//检查来源,是否为自己指定的服务器,
if not instr(1,Request。
ServerVariables("http_Referer"),servername,1)=8 then
response。write "非法来源~!"
response。
end
end if
//检查文件大小,类型,等,这些代码略去,网上很多关于FSO组件的介绍
。 。。
//上传代码,略去
。。。。
//成功后转向的URL,就是执行上传操作的地址,把信息当作msg传过去
url="http://"&servername&"/blog_ p?msg="
if 上传成功 then//把脚本传过去,因为JS中的+号不能被传递。
因此使用server。urlencode函数,此脚本在 上才有权限运行
url=url+ " lue"&server。urlencode("+")&"=''"
//把文件名也传送过去,以便存
数据库备查
direct url+"上传成功&filename="&FileName
end if
下面就是blog_ p上的代码了,很简单。
//传成功了,自然要把已经diable的提交BLOG按纽恢复
mAnnounce。Submit。disabled=false;
//还有就是把传过来的信息显示出来
response。
write request("msg")
//如果request("filename")<>"" 写入数据库代码省略
response。 write "[ 重新上传 ]"
看上去perfect了,但如人家得到了你的源码的话,轻而易举把你的上传服务器当成网络硬盘用。
。。。
只要把hosts文件里的中一句 ,然后相应写一个提交文件用的blog_ p就行了, 头疼ing,代码是不能允许有半点安全漏洞的,验证的域名能被欺骗,那就验证上传者的用户名与密码, 怎么去 的数据库上去查询用户名与密码是否正确呢?
这就少不了xmlhttp,先在 上做一个blog_ p,内容非常简单,对传的用户名与密码验证,成功则输出1,失败则输出0
blog_ p接受上传之前先调用此文件验证。
下面为代码,虽然也是使用域名 , 但此操作在 的服务器上执行,所以与使用者本地的hosts文件无关
做到这个地方,终于可以松口气了,写的很乱,希望能勉强看懂。。
。
。