beego可算是Go框架里面文檔最多的了。學(xué)起來(lái)比較容易。但是框架自身的局限性卻帶了不小的問(wèn)題。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到潢川網(wǎng)站設(shè)計(jì)與潢川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋潢川地區(qū)。
最近我在處理flash跨域問(wèn)題上就遇到個(gè)活生生的例子:
flash里面的as3訪問(wèn)外網(wǎng)時(shí)沒(méi)啥問(wèn)題??墒羌偃缤ㄟ^(guò)網(wǎng)頁(yè)調(diào)取的情況下,flash訪問(wèn)的外網(wǎng)又與所在網(wǎng)頁(yè)不是一個(gè)域的。就會(huì)產(chǎn)生跨域問(wèn)題。打開(kāi)瀏覽器,f12之后,看到的就是flash沒(méi)有訪問(wèn)你的url,而是訪問(wèn)了這個(gè)url所在的域名根目錄下的配置文件crossdomain.xml。該配置文件來(lái)設(shè)置跨域訪問(wèn)的權(quán)限。
這時(shí)候需要在你的域名根目錄下放個(gè)crossdomain.xml文件。恰巧我用的是beego,不支持這功能!~
解決辦法:
既然不支持那就把beego寫成一個(gè)文件服務(wù)器的功能即可。把我的crossdomain.xml同樣放到static下,在收到這個(gè)請(qǐng)求時(shí),直接將這個(gè)文件寫回到response即可。上代碼:
package main
import ( "fmt" http "net/http" "path/filepath" "strings" "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (this *MainController) Get() { //this.Ctx.Request.URL= http://127.0.0.1/crossdomain.xml orpath := this.Ctx.Request.URL.Path if strings.Index(orpath, "crossdomain.xml") >= 0 { fmt.Println(orpath) // /crossdomain.xml path := filepath.Join(`static`, "crossdomain.xml") http.ServeFile(this.Ctx.ResponseWriter, this.Ctx.Request, path) } this.Ctx.WriteString("hello world" + orpath) } func (this *MainController) Post() { name := this.GetString("name") sex := this.GetString("sex") this.Ctx.WriteString(name + sex+"成功") fmt.Println(name + sex) } func main() { beego.Router("/*", &MainController{}) beego.Run() }
當(dāng)然了這不是什么好辦法。只是拋磚引玉而已。所有的請(qǐng)求都要判斷一下,如果想完善一下,在路由配置時(shí)可以精確匹配url處理的controller就好了,而對(duì)于自己的controller就會(huì)沒(méi)有影響了
以上這篇完美解決beego 根目錄不能訪問(wèn)靜態(tài)文件的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。