猿问

大猩猩/多路复用器:图像不显示

我是 Golang 的新手。我需要显示图像。我尝试使用 Gorilla/mux。但我仍然收到错误:404。我的事情可能是我使用 mux 代码的地方不正确。


主要功能


    package main

    import (

        "net/http"

        "mytestsite/handlers"

         "log"

         "github.com/gorilla/mux"

     )



    func main() {


    r := mux.NewRouter()

    r.HandleFunc("/register", handlers.RegisterHandler)

    r.HandleFunc("/sucess", handlers.Sucess)

    r.HandleFunc("/login", handlers.Login)

    r.HandleFunc("/list", handlers.ViewList)

    r.HandleFunc("/logout", handlers.Logout)

    r.HandleFunc("/edit", handlers.Edit)

    r.HandleFunc("/EditnList", handlers.EditnList)

    r.HandleFunc("/notvalid", handlers.NotValid)

    r.HandleFunc("/delete", handlers.Delete)

    r.HandleFunc("/listchoose", handlers.ListChoose)

    r.HandleFunc("/email", handlers.SendEmail)

    images := http.StripPrefix("/images/", http.FileServer(http.Dir("./frontend/images/")))

    r.PathPrefix("/images/").Handler(images)


    if err := http.ListenAndServe(":8181", r); err != nil {

        log.Fatal("http.ListenAndServe: ", err)

    }        

}

将数据传递给 html 的 Func


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

    viewModel:=viewmodels.RegisterViewModel{}

    user:=models.User{}

    dbResults := user.ViewDB() 


    //Cookies below

    cookieCheck := getCookie(r)


    if (cookieCheck != ""){

        err:=GetTemplate("list").Execute(w,dbResults)

        if err!=nil{

            panic(err)

        }

    } else { 

        viewModel.ErrorMessage="Please Enter Email Id and Password.."

        err:=GetTemplate("login").Execute(w,viewModel)

        if err!=nil{

            panic(err)

        }

    }

}

在 html 文件中的使用


<td><img src="{{.Photo}}" alt="{{.Photo}}" style="width:50px;height:50px;"/></td>

{{.Photo}} 的值通过以下代码存储到 Db:


ctime := time.Now()

uploadedfile := "frontend/images"+ctime.Format("20060102150405")+".jpg"

out, err := os.Create(uploadedfile)

{{.Photo}} 的 SO 值如下所示


frontend/images/20160202171411.jpg


犯罪嫌疑人X
浏览 161回答 1
1回答

扬帆大鱼

你在这里混合了两个路由器。首先,http 包有一个包全局默认处理程序,称为:DefaultServeMux。这是http.ServeMux 的一个实例当您调用http.HandleFunc 时, DefaultServeMux 是该处理程序注册的位置(源)当您调用http.ListenAndServe 时,第二个参数是用于进入您指定端口的 HTTP 请求的处理程序。如果您将 nil 作为处理程序传递(就像您在代码中所做的那样),您是在告诉 http 服务器使用 http.DefaultServeMuxGorilla mux是 http.ServeMux 的替代品。通常,您可以使用其中一种。在您的情况下,您正在使用 gorilla mux 注册您的文件服务器,然后告诉 http.ListenAndServe 使用 http.DefaultServeMux(通过省略处理程序)。您可以使用标准 http 库的默认 mux 注册您的文件服务(通过:http.Handle)或更改您的函数映射以注册您的 Gorilla mux (通过:r.HandlerFunc)。如果您选择使用 Gorilla(更灵活的解决方案,但考虑到您的示例代码并不是真正必要的),然后将它而不是 nil 传递给 ListenAndServe。
随时随地看视频慕课网APP

相关分类

Go
我要回答