Golang Web应用中img标签无法正常显示的问题排查
Golang Web应用中img标签无法正常显示的问题排查
我是一名经验丰富的开发者,但主要编写桌面应用程序。我正在使用Golang编写我的第一个Web服务器,目前运行良好。我在本地运行它,可以从服务器上的浏览器或WiFi网络中的任何其他计算机调用它。我有三个请求处理器,其中一个名为primesRequestHandler(),用于处理以“/primes/”开头的请求。
我想学习如何引入图像,因此添加了这行代码:
<img alt="Rick" width="100" height="80">
Rick.jpg文件与main.go文件位于同一目录中。
文件加载失败,并且我的一个处理器被调用。
因此我记录了传入的请求:
primesRequestHandler r.URL.Path: /primes/Rick.jpg
我原本期望浏览器会使用类似以下方式从服务器检索文件:
http://192.168.8.7:8080/Rick.jpg,但我想事情并非如此运作。
更多关于Golang Web应用中img标签无法正常显示的问题排查的实战教程也可以访问 https://www.itying.com/category-94-b0.html
哇,这个也不行。你得相信我,src 设置确实在里面。
更多关于Golang Web应用中img标签无法正常显示的问题排查的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

我来试试。我想肯定有办法展示代码。
我忘记提到我正在使用一个模板。我检查了模板正在检查的内容,以下是它在那里的显示方式:
看起来没问题。
奇怪,不知为何,当我将HTML粘贴到我的消息中时,它移除了src部分。也许我引用一下:
无论如何,你的建议非常有效。非常感谢。
rschluet: 哇,那个方法也不行。
如果你直接粘贴代码,它会显示为:

如果你选中你的代码并使用‘</>’按钮,它会显示为代码:
<img src="/img/rick.jpg" alt="Rick">
(或者使用反引号 `)
rschluet:
我想学习如何引入图片,所以我添加了这行代码:
这行代码不会生效,因为 Go 不知道去哪里找图片:
<img alt="Rick" width="100" height="80">
你必须添加图片的路径
<img src="/img/rick.jpg" alt="Rick">
并且在 main.go 文件中添加这行代码:
func init() {
tpl = template.Must(template.ParseGlob("public/tmpl/*.html"))
http.Handle("/img/", http.StripPrefix("/img/", http.FileServer(http.Dir("./public/img"))))
}
假设你有这样的文件夹结构:Install Go on Your Computer
在Golang Web应用中,img标签的src属性需要指向一个有效的HTTP端点。你遇到的问题是浏览器正在向/primes/Rick.jpg发送请求,而你的primesRequestHandler正在处理它,而不是一个专门提供静态文件的处理器。
以下是解决方案:
- 创建静态文件处理器:
使用
http.FileServer来提供静态文件。将以下代码添加到你的main函数中:
// 提供静态文件
fs := http.FileServer(http.Dir("."))
http.Handle("/", fs)
- 调整路由顺序: 确保静态文件处理器在特定路由之前注册,或者使用不同的路径前缀:
// 提供静态文件(例如,将静态文件放在"static"目录中)
fs := http.FileServer(http.Dir("static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
// 特定路由
http.HandleFunc("/primes/", primesRequestHandler)
- 更新HTML中的img标签:
根据你的静态文件路径调整
src属性:
<!-- 如果使用根目录 -->
<img src="/Rick.jpg" alt="Rick" width="100" height="80">
<!-- 如果使用静态目录 -->
<img src="/static/Rick.jpg" alt="Rick" width="100" height="80">
完整示例:
package main
import (
"net/http"
)
func primesRequestHandler(w http.ResponseWriter, r *http.Request) {
// 你的素数处理逻辑
}
func main() {
// 提供静态文件(当前目录)
fs := http.FileServer(http.Dir("."))
http.Handle("/", fs)
// 特定路由
http.HandleFunc("/primes/", primesRequestHandler)
http.ListenAndServe(":8080", nil)
}
这样配置后,浏览器请求/Rick.jpg将由静态文件处理器处理,而/primes/路径的请求仍由你的primesRequestHandler处理。

