2016-06-21 10 views
2

我刚刚开始使用GO,并且正在创建一个简单的Web界面。我有一个可用的GO服务器,一个名为“survey.gtpl”的HTML模板,它由服务器按照预期提供,并且我希望在网页上显示一个徽标。无论我将图像放在工作区目录结构中的位置还是作为src路径放置的位置,图像都不会加载。Go Lang - 在目录结构中放置要在HTML模板中使用的图像的位置?

这里是当前目录结构:

+ workspace 
    + bin 
     server.exe 
    + src 
     + github.com 
      + cwrighta70 
       + web 
        server.go 
    LogoColor.jpg 
    survey.gtpl 

这里是

<img src = "LogoColor.jpg" alt="Logo" width="789px" height="182px"> 

我试过把图像在它自己的目录下的“survey.gtpl”模板”内的路径在工作区内,如workspace/img/LogoColor.jpg,我也试过把它放在workspace/bin/LogoColor.jpg的web服务器可执行文件中,我在浏览器中得到的全部是Alt文本

任何帮助,非常感谢!

  • 克里斯
+2

你把图片放在哪里与模板无关。提供这些文件的处理程序必须能够找到它们。 – JimB

+0

你应该建立一个名为'public'或'html'或'web'的文件夹,把你的静态资源放在那里,然后用这个文件夹来托管这个文件夹。 [gin-gonic/contrib/static](https://github.com/gin-gonic/contrib/blob/master/static/static_test.go#L62) – Plato

+0

使用您的浏览器调试工具并验证您的服务器是否正在发送正确的路径。 – tier1

回答

0

好了,所以如果发现一对夫妇不同的方式来做到这一点。首先,我的实际解决方案是将我的应用程序移植到CGI而不是Go Web Server。这消除了分开提供资产的需要。

但是,对于那些有Go Web服务器并需要弄清楚的人,下面是我做的。我将所有资源(即图像,样式表等)放在应用程序运行的根目录下的“resources”目录中,然后在主要URL中添加一个HandleFunc,如下所示:

router := http.NewServeMux() 
router.HandleFunc(getURL("/view/"), viewHandler) 
router.HandleFunc(getURL("/resources/"), serveAssets) 

然后,serveAssets函数试图打开每个资源,如果如图成功呼叫ServeContent

func serveAssets(w http.ResponseWriter, r *http.Request) { 
    r.ParseForm() 

    file, err := os.Open(docRoot + r.URL.String()) 
    if err != nil { 
     http.Error(w, err.Error(), http.StatusNotFound) 
     return 
    } 

    modeTime := time.Now() 
    http.ServeContent(w, r, docRoon+r.URL.String(), modeTime, file) 
} 

应该这样做!

相关问题