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

原创 2004年06月15日 10:53:00
如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持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         验证用户名与密码
hn2_sunny.gif
在发布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>
hn2_sunny.gif

如果你玩过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"> 
hn2_sunny.gif
测试一下,文件上传成功,那自动加UBB代码呢...
http://www.diygame.com/blog_UPFILE.ASP  里加一句js脚本
<script>parent.frmAnnounce.Content.value+='[img]http://www.diygame.com/'+FileName+'[/img]'</script>
hn2_sunny.gif传上去再测试,错误提示"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("+")&"='[img]http://www.diygame.com/"&FileName&"[/img]'</script>"
     //把文件名也传送过去,以便存数据库备查
     response.redirect  url+"上传成功&filename="&FileName
end if
hn2_sunny.gif
下面就是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> ]"
hn2_sunny.gif
看上去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

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

Java中实现文件的跨服务器上传

前几天做个项目,本身客户端和管理员端是写在一起的,共用一台服务器,客户上传的文件都是存在服务器的硬盘上的。老龙提出要把客户端和管理员端分离,这时候用户上传的附件的存储就出现问题了。显然,把大到几百M的...
  • Wu_Fei_Li
  • Wu_Fei_Li
  • 2017年04月10日 15:37
  • 2524

使用WebUploader跨域上传图片,用SpringMVC实现服务器端

使用WebUploader跨域上传图片,用SpringMVC实现服务器端使用WebUploader实现跨域上传图片,当点击上传时,客户端会向服务器端先后发送两次请求,第一次是OPTIONS请求,用来验...
  • HoloLens
  • HoloLens
  • 2017年07月11日 10:57
  • 1517

关于使用百度编辑器(ueditor编辑器)跨域上传将图片上传到独立服务器的问题

最近公司要使用ueditor编辑器,但是关于跨域上传的问题,出现了很多不可预料的错误,一次次的调试,一个个的坑,现在终于完成了,把过程写下来分享给大家,希望大家支持,因为我在百度上查了很久,也没有找到...
  • sinat_29325027
  • sinat_29325027
  • 2016年06月27日 10:28
  • 9364

step-by-step多文件WEB批量上传(swfupload)的完美解决方案

★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/255583 》 谢谢支持! ★★★ 功能完全支持ie和firefox浏览...
  • xiyang_1990
  • xiyang_1990
  • 2013年11月04日 21:17
  • 1317

php 无法上传大文件完美解决方案

php.ini无法上传大文件完美解决办法 1、打开php.ini(打开方式就不用说了,百度一大堆) 2、查找post_max_size 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对...
  • mailangel123
  • mailangel123
  • 2014年10月25日 20:51
  • 451

step-by-step多文件WEB批量上传(swfupload)的完美解决方案【zt】

功能完全支持ie和firefox浏览器! 一般的WEB方式文件上传只能一个一个的进行上传,在某些应用上就显得很不人性化,客户们都希望能够1次选择很多文件,然后让系统把选择的文件全部上传。 ...
  • fyqcdbdx
  • fyqcdbdx
  • 2011年08月26日 11:11
  • 713

SpringMVC 跨服务器文件上传

  • 2017年11月28日 21:03
  • 19.33MB
  • 下载

IIS7服务器上传大30M的文件时出现找不到文件或目录错误的解决办法

  • 2015年08月10日 14:45
  • 252KB
  • 下载

sftp 文件上传 跨服务器 java

最近公司搞服务器迁移想把大量图片搞一个文件服务器 后续上传图片就采用sftp协议方式上传  参考了一篇blog   http://blog.csdn.net/haidage/article/deta...
  • majun_guang
  • majun_guang
  • 2015年05月22日 16:01
  • 1006

【服务端知识点】(十五天)文件上传实现——30天node+mongo+react+redux+express搭建完美资源后台管理系统+前端(全栈工程师 结合antd)

这个系列文章是自己在开发过程中,自己感悟学习以及借鉴各方大师大神经验分享,非常尊重每个人的劳动成果,目的就是与大家共同分享学习,共同进步! 后台资源管理,增删改查操作必不可少,其中增加资源又是一切的根...
  • chaunceyw
  • chaunceyw
  • 2016年12月21日 12:47
  • 1677
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跨服务器上传文件完美解决
举报原因:
原因补充:

(最多只允许输入30个字)