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

服务器|解决|上传

  如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持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=" 上 传 " >
测试一下,文件上传成功,那自动加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交流,网址在上面已经出现过很多遍

时间: 2024-09-17 12:38:57

ASP跨服务器上传文件完美解决的相关文章

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

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

利用ASP.NET向服务器上传文件

asp.net|服务器|上传 文件上传技术是一个很实用的技术,有着很广泛的应用,在ASP.NET自身的前一个版本ASP里实现这个功能,就必须使用第三方的组件或者自己开发组件了,现在,用ASP.NET实现起来就简单得多了,我们不需要使用任何组件就可以实现上传的功能了.    为了方便讲解,我们可以把文件上传分成两种类型:单一文件上传和多文件上传.        单一文件上传    我们先来介绍单一文件上传的方法,单一文件上传就比较简单了,     下面是实现单一文件上传的完整代码:<%@ Impo

ASP.NET 在上传文件前判断文件大小的问题

问题描述 ASP.NET在上传文件前判断文件大小的问题大家好,VisualStudio的WebForm中我用了FileUpload控件来向数据库提交文件,我知道IIS默认限制4M:而我是通过程序控制到了3M以下.但每次判断都是文件上载之后,才能通过FileUpload1.PostedFile.ContentLength取到文件大小.如果用户上传了大于4M或更大的文件,IE会报错,体验不好:请问ASP.NET是否有办法在文件上载之前,判断文件大小呢? 解决方案 解决方案二:JQuery验证文件大小

JSP SmartUpload上传文件乱码解决纪实+UploadBean上传解决方案

js|解决|上传 作者:fbysss声明:本文为fbysss原创,如需引用,请注明作者及引用地址关键字:smartupload,uploadbean,linux,中文乱码一.SmartUpload上传文件乱码解决纪实 恶心指数:五星 完成程度:80%(文件名问题未解决) 问题描述:在windows下开发的web应用,用到了smartupload上传文件,需求很简单,就是一个表单文件formdata.jsp,一个获取表单并上传的文件getdata.jsp,调试的时候,windows和linux系统

spring mvc-关于Spring mvc 向服务器上传文件报错问题

问题描述 关于Spring mvc 向服务器上传文件报错问题 Spring mvc在向服务器上传的文件的时候报错 显示系统找不到指定的路径,应该要怎么修改 解决方案 大文件上传到服务器报错的问题大文件上传到服务器报错的问题ASP.NET 上传Excel到服务器报错的问题 解决方案二: 错误粘出来看看,可能原因有很多 解决方案三: 代码是这个 @RequestMapping("/updateExcel") public String updateExcel(HttpServletRequ

iis-asp.net跨站点上传文件

问题描述 asp.net跨站点上传文件 iis有两个站点: 1). web(asp.net) --> http://192.168.1.104:8282; 2).FileServer --> http://192.168.1.104:8083. PS:FileServer站点有一虚拟目录(fileserver/),而虚拟目录对应的物理路径是一个共享目录. 操作: web站点上传文件需保存到FileServer站点的fileserver虚拟目录对应的目录下. 补充: iis未能提供帐号和密码,匿

asp.net 如何上传文件?

问题描述 asp.net如何上传文件?谢谢各位大虾! 解决方案 解决方案二:有上传控件的解决方案三:引用1楼cychris的回复: 有上传控件的 解决方案四:用上传控件stringpicture=this.fuploadPic.PostedFile.FileName;//获取客户端的路径名字picture=DateTime.Now.ToFileTime().ToString()+picture.Substring(picture.LastIndexOf("."));//我把文件名字重新

ASP.net判断上传文件类型的三种有效方法

 这篇文章主要介绍了用ASP.net判断上传文件类型的三种方法,需要的朋友可以参考下 一.安全性比较低,把文本文件1.txt改成1.jpg照样可以上传,但其实现方法容易理解,实现也简单,所以网上很多还是采取这种方法.   代码如下: Boolean fileOk = false;  string path = Server.MapPath("~/images/");  //判断是否已经选取文件  if (FileUpload1.HasFile)  {  //取得文件的扩展名,并转换成小

PHP跨网域跨主机跨server上传文件实例教程

如何跨网域跨主机跨server上传文件?一般最基本的上传方式是: 1.使用者把文件上传到 web server 2. web server 把上传的文件 利用 move_uploaded_file() 函式,将档案移到指定的文件夹内 但是,有时候我们需要把上传的档案放到另一台专门放文件的 file server,这时候,就无法利用 move_uploaded_file() 去搬移文件了,而需要利用 ftp 去传送文件至 file server,方法很简单... 直接看程式码:    代码如下 复