英文:
Display gif image with webserver in Go (golang)
问题
我正在尝试使用这个简单的Go程序输出一个1x1的透明GIF图像(在base64中预先生成),但似乎无法使其工作。有人知道如何使用预先生成的base64字符串或从磁盘上的文件来实现这个吗?
我感谢您的帮助。
package main
import (
"net/http"
"io"
"encoding/base64"
)
const base64GifPixel = "R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs="
func respHandler(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type","image/gif")
output,_ := base64.StdEncoding.DecodeString(base64GifPixel)
io.WriteString(res,string(output))
}
func main() {
http.HandleFunc("/", respHandler)
http.ListenAndServe(":8086", nil)
}
我希望这可以帮到您。
英文:
I'm trying to output a 1x1 transparent GIF image (pre-generated in base64) with this simple Go program, although I can't seem to get it working. Does anyone have idea on how to do this either with the pre-generated base64 string or with a file from disk?
I appreciate the help.
package main
import (
"net/http"
"io"
"encoding/base64"
)
const base64GifPixel = "R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs="
func respHandler(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type","image/gif")
output,_ := base64.StdEncoding.DecodeString(base64GifPixel)
io.WriteString(res,string(output))
}
func main() {
http.HandleFunc("/", respHandler)
http.ListenAndServe(":8086", nil)
}
答案1
得分: 8
这里似乎工作正常:
$ wget -q -O file.gif http://localhost:8086
$ file file.gif
file.gif: GIF 图像数据, 版本 89a, 1 x 1
你是如何验证它不工作的?如果你用浏览器访问它,我猜它会显示一个空白页面,其中有一个透明像素,这有点难以察觉。
另外,强烈建议检查错误,即使在示例代码中也是如此(很多时候示例代码本身就解释了问题)。
英文:
Seems to be working fine here:
$ wget -q -O file.gif http://localhost:8086
$ file file.gif
file.gif: GIF image data, version 89a, 1 x 1
How are you verifying that it is not working? If you access it with a web browser, I suppose it'll show an empty page with a transparent pixel in it, which is a bit hard to spot.
As a side note, checking errors is strongly recommended, even in sample code (many times the sample code explains itself).
答案2
得分: 1
这段代码的中文翻译如下:
对我也适用。顺便说一下,如果你正在使用这段代码作为一个信标/跟踪像素的一部分,你可以简单地返回一个204无内容的响应(它比GIF小35字节,并且可以实现完全相同的目的):
func EventTracker(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.NotFound(w, r)
return
}
// 在这里插入跟踪逻辑
w.WriteHeader(http.StatusNoContent)
}
英文:
works for me too. by the way, if you are doing this as a part of a beacon/tracking pixel, you could simply return a 204 no content (it's 35 bytes smaller than the gif and it can serve the exact same purpose):
func EventTracker(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.NotFound(w, r)
return
}
//insert tracking logic here
w.WriteHeader(http.StatusNoContent)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论