为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
犯罪嫌疑人X 2021-12-07 18:27:31
我是 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 的 Funcfunc 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
查看完整描述

1 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

你在这里混合了两个路由器。

首先,http 包有一个包全局默认处理程序,称为:DefaultServeMux。这是http.ServeMux 的一个实例

当您调用http.HandleFunc 时, DefaultServeMux 是该处理程序注册的位置(

当您调用http.ListenAndServe 时,第二个参数是用于进入您指定端口的 HTTP 请求的处理程序。

如果您将 nil 作为处理程序传递(就像您在代码中所做的那样),您是在告诉 http 服务器使用 http.DefaultServeMux

Gorilla mux是 http.ServeMux 的替代品。通常,您可以使用其中一种。

在您的情况下,您正在使用 gorilla mux 注册您的文件服务器,然后告诉 http.ListenAndServe 使用 http.DefaultServeMux(通过省略处理程序)。

您可以使用标准 http 库的默认 mux 注册您的文件服务(通过:http.Handle)或更改您的函数映射以注册您的 Gorilla mux (通过:r.HandlerFunc)。

如果您选择使用 Gorilla(更灵活的解决方案,但考虑到您的示例代码并不是真正必要的),然后将它而不是 nil 传递给 ListenAndServe。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信