IT学习者 | 站长学院 | 技术文档 | 成语 | 歇后语 | 桌面壁纸 | 天气预报 | 帝国时代 | 生日密码 | 代码收藏 | 厦门天气 | IP地址查询 | 生活百科

跨服务器上传文件完美解决

【 来源:shilong 的 Blog 作者:佚名 更新时间:2006-08-09 | 字体:

如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持FSO,那么跨服务器上传文件这个问题就摆在你面前了,下面就是我在解决ylog.net里面的跨服务器上传文件的日记,这个问题看似简单,里面的细节问题却是非常有趣
前提条件,空间都必须支持ASP,上传文件的服务器支持FSO,下面的叙述中,diygame.com为存上传文件的服务器,ylog.net为网站服务器,即显示用户界面的服务器...
实现功能,文件上传,上传后在网页的文本区域自动加上对于图片的UBB码,为了清楚,下面列出所有用到的文件


服务器             文件名                   用途 
diygame.com      blog_upfile.asp             接收上传文件用
ylog.net                blog_add.asp               添加BLOG,上传文件功能在此出现
ylog.net                blog_upload.asp          上传文件表单,以iframe的形式嵌在blog_add.asp里
ylog.net                blog_upresult.asp        显示上传结果,作善后工作
ylog.net               blog_upcheck.asp         验证用户名与密码

在发布BLOG页面Blog_add.asp增加一个iFrame,调用blog_upload.asp进行上传操作
<iframe border="0" frameBorder="0" frameSpacing="0" height="25" marginHeight="0" marginWidth="0" noResize scrolling="no" width="100%" vspale="0" src="blog_upload.asp"></iframe>


如果你玩过ASP,自然不费吹灰之力想到,文件要传到另外一个服务器上,只要把blog_upload.asp里的上传Form的action页面指向目标服务器就行了,
<form name="form" method="post" action="http://www.diygame.com/blog_UPFILE.ASP"
//中间略去
//提交时把发布BLOG的按纽disable先,以免没传完就时用户把BLOG发表了
  <input type="submit" class=button name="Submit" value=" 上 传 " onclick="parent.document.frmAnnounce.Submit.disabled=true"> 

测试一下,文件上传成功,那自动加UBB代码呢...
http://www.diygame.com/blog_UPFILE.ASP  里加一句js脚本
<script>parent.frmAnnounce.Content.value+='按此在新窗口浏览图片'</script>
传上去再测试,错误提示"blog_UPFILE.ASP  权限不够",既然diygame.com的文件权限不够,ylog.net总可以吧,当blog_upfile.asp操作完成时,再调用一个本服务器的ASP文件,于是blog_upresult.asp出现了,他负责善后
修改blog_upfile.asp,我用C++的习惯,注释用//符

servername="www.ylog.net"  //标志服务器名
//检查来源,是否为自己指定的服务器,
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_upresult.asp?msg="
if   上传成功 then//把脚本传过去,因为JS中的+号不能被传递.因此使用server.urlencode函数,此脚本在ylog.net上才有权限运行
    url=url+ "<script>parent.frmAnnounce.Content.value"&server.urlencode("+")&"='按此在新窗口浏览图片'</script>"
     //把文件名也传送过去,以便存数据库备查
     response.redirect  url+"上传成功&filename="&FileName
end if

下面就是blog_upresult.asp上的代码了,很简单

//传成功了,自然要把已经diable的提交BLOG按纽恢复
 <script>
parent.frmAnnounce.Submit.disabled=false;
</script>
//还有就是把传过来的信息显示出来
response.write request("msg")
//如果request("filename")<>"" 写入数据库代码省略
response.write "[ <a href=# onclick=history.go(-1)>重新上传</a> ]"

看上去perfect了,但如人家得到了你的源码的话,轻而易举把你的上传服务器当成网络硬盘用....
只要把hosts文件里的中一句 127.0.0.1  www.ylog.net
然后相应写一个提交文件用的blog_upload.asp就行了,
头疼ing,代码是不能允许有半点安全漏洞的,验证的域名能被欺骗,
那就验证上传者的用户名与密码,diygame.com怎么去ylog.net的数据库上去查询用户名与密码是否正确呢
这就少不了xmlhttp
先在ylog.net上做一个blog_upcheck.asp,内容非常简单,对传的用户名与密码验证,成功则输出1,失败则输出0
<%
name=request("name")
psw=request("psw")
checkstr(name)//滤掉SQL字符
checkstr(psw))//滤掉SQL字符
   if  从数据库检查用户名=成功 then
     response.write 0
     else
     response.write 1
     end if

%>

blog_upfile.asp接受上传之前先调用此文件验证.下面为代码,虽然也是使用域名www.ylog.net但此操作在diygame.com的服务器上执行,所以与使用者本地的hosts文件无关
<%
str=getHTTPPage("http://"&servername&"/blog_upcheck.asp?name="&name&"&psw="&password)
if str<>"1" then 
      response.write "非法用户~!"
     response.end    
end if
//两个操作函数。非常有用,可以用到别的地方
Function getHTTPPage(URL)
    Set HTTPReq = Server.createobject("Microsoft.XMLHTTP")
    HTTPReq.Open "GET", URL, False
    HTTPReq.send
    If HTTPReq.readyState <> 4 Then Exit Function
    getHTTPPage = bytes2BSTR(HTTPReq.responseBody)
    Set HTTPReq = Nothing
End Function

Function bytes2BSTR(vIn)
    Dim strReturn
    Dim I, ThisCharCode, NextCharCode
    strReturn = ""
    For I = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn, I, 1))
        If ThisCharCode < &H80 Then
            strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn, I + 1, 1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            I = I + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function
%>

做到这个地方,终于可以松口气了,写的很乱,希望能勉强看懂。。。
如果你有更好的方法或者有什么看不懂的地方,欢迎来我的BLOG交流,网址在上面已经出现过很多遍

  • 转载请注明来源:IT学习者 网址:http://www.itlearner.com/ 向您的朋友推荐此文章
  • 文章关键词:  服务器  上传 
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
RSS订阅
  • 抓虾
  • google reader
  • 鲜果
  • QQ邮箱

音乐
犯贱 月光 包容 想你了 甩葱歌 黄梅戏 爱情错觉 星月神话 这就是爱 最幸福的人 爱笑的眼睛 321对不起 你不知道的事 看透爱情看透你 你还欠我一个拥抱
忐忑 爱过 浮夸 猜不透 洛丽塔 错的人 爱情买卖 和平分手 等你爱我 没那么简单 我的心好冷 姑娘我爱你 在回忆中死去 我的爱情不见了 你在我心中是最美
她说 偏爱 素颜 错错错 走天涯 套马杆 断桥残雪 爱是你我 郎的诱惑 客官不可以 我要去西藏 我的好兄弟 哥只是个传说 情歌没有告诉你 我和草原有个约定
天真 王妃 小三 爱琴海 要抱抱 单身歌 埋葬冬天 给力青春 荷塘月色 最好不相见 最炫民族风 新贵妃醉酒 贝多芬的悲伤 大笑江湖主题曲 给我一个理由忘记
加入收藏留言建议ASP探针PHP探针站长Enjoy的BlogAboutDomain
© 2010 IT学习者 - itlearner.com
RunTime:42.77ms