国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

跨服務器上傳文件完美解決

2024-07-21 02:04:05
字體:
來源:轉載
供稿:網友

如果你有兩個空間,一個大而慢,另外一個小而快,或者其中一個不支持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交流,網址在上面已經出現過很多遍

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙湾县| 惠州市| 鹰潭市| 米易县| 嘉祥县| 夏津县| 阜南县| 方正县| 日土县| 丽水市| 中卫市| 包头市| 章丘市| 子长县| 扎囊县| 永州市| 墨脱县| 象山县| 沁水县| 威远县| 汉寿县| 巴林右旗| 肃南| 津市市| 桐城市| 稻城县| 招远市| 江门市| 韶关市| 东明县| 宜黄县| 隆林| 治多县| 临安市| 东明县| 黔西| 蒙城县| 锦州市| 河南省| 庐江县| 利津县|