首页 > 开发 > PHP > 正文

解决beego根目录不能访问静态文件的问题

2024-05-04 22:00:45
字体:大 中 小
来源:转载
供稿:网友

beego可算是Go框架里面文档最多的了。学起来比较容易。但是框架自身的局限性却带了不小的问题。

最近我在处理flash跨域问题上就遇到个活生生的例子:

flash里面的as3访问外网时没啥问题。可是假如通过网页调取的情况下,flash访问的外网又与所在网页不是一个域的。就会产生跨域问题。打开浏览器,f12之后,看到的就是flash没有访问你的url,而是访问了这个url所在的域名根目录下的配置文件crossdomain.xml。该配置文件来设置跨域访问的权限。

这时候需要在你的域名根目录下放个crossdomain.xml文件。恰巧我用的是beego,不支持这功能!~

解决办法:

既然不支持那就把beego写成一个文件服务器的功能即可。把我的crossdomain.xml同样放到static下,在收到这个请求时,直接将这个文件写回到response即可。上代码:

  1. package main 
  2. import ( 
  3. "fmt" 
  4. http "net/http" 
  5. "path/filepath" 
  6. "strings" 
  7.  
  8.  
  9. "github.com/astaxie/beego" 
  10. ) 
  11.  
  12.  
  13. type MainController struct { 
  14. beego.Controller 
  15. } 
  16.  
  17.  
  18. func (this *MainController) Get() { 
  19. //this.Ctx.Request.URL= http://127.0.0.1/crossdomain.xml 
  20. orpath := this.Ctx.Request.URL.Path 
  21.  
  22. if strings.Index(orpath, "crossdomain.xml") >= 0 { 
  23. fmt.Println(orpath) // /crossdomain.xml 
  24.  
  25. path := filepath.Join(`static`, "crossdomain.xml") 
  26.  
  27. http.ServeFile(this.Ctx.ResponseWriter, this.Ctx.Request, path) 
  28. } 
  29.  
  30. this.Ctx.WriteString("hello world" + orpath) 
  31.  
  32. } 
  33.  
  34.  
  35. func (this *MainController) Post() { 
  36. name := this.GetString("name") 
  37. sex := this.GetString("sex") 
  38. this.Ctx.WriteString(name + sex+"成功") 
  39. fmt.Println(name + sex) 
  40. } 
  41.  
  42.  
  43. func main() { 
  44.  
  45. beego.Router("/*", &MainController{}) 
  46. beego.Run() 
  47. } 

当然了这不是什么好办法。只是抛砖引玉而已。所有的请求都要判断一下,如果想完善一下,在路由配置时可以精确匹配url处理的controller就好了,而对于自己的controller就会没有影响了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表