8

我正在尝试使用这个简单的 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)
}
4

2 回答 2

8

似乎在这里工作正常:

$ wget -q -O file.gif http://localhost:8086
$ file file.gif
file.gif: GIF image data, version 89a, 1 x 1

你如何验证它不工作?如果您使用网络浏览器访问它,我想它会显示一个带有透明像素的空白页面,这有点难以发现。:-)

作为旁注,强烈建议检查错误,即使在示例代码中也是如此(很多时候示例代码会自行解释)。

于 2013-09-12T13:32:55.280 回答
1

也为我工作。顺便说一句,如果您将其作为信标/跟踪像素的一部分,则可以简单地返回 204 无内容(它比 gif 小 35 个字节,并且可以达到完全相同的目的):

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)
}
于 2014-09-03T14:24:57.180 回答