Отображение GIF-изображения с веб-сервером в Go (golang)

Я пытаюсь вывести прозрачное изображение GIF размером 1x1 (предварительно созданное в base64) с помощью этой простой программы Go, хотя я не могу заставить ее работать. Кто-нибудь знает, как это сделать либо с предварительно сгенерированной строкой 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)
}

person hartfordfive    schedule 12.09.2013    source источник
comment
вы можете использовать res.Write(output) напрямую вместо io.WriteString(res,string(output))   -  person Kluyg    schedule 12.09.2013
comment
Ваше GIF-изображение кажется белым, а не прозрачным. Вы можете использовать R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 для прозрачного ( css-tricks.com/snippets/html/ )   -  person jareks    schedule 08.11.2015


Ответы (2)


Кажется, здесь все работает нормально:

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

Как вы проверяете, что он не работает? Если вы получите к нему доступ через веб-браузер, я полагаю, он покажет пустую страницу с прозрачным пикселем, который немного трудно обнаружить. :-)

В качестве примечания настоятельно рекомендуется проверять ошибки даже в примере кода (во многих случаях пример кода объясняет сам себя).

person Gustavo Niemeyer    schedule 12.09.2013

работает и для меня. кстати, если вы делаете это как часть маяка/пикселя отслеживания, вы можете просто вернуть 204 без содержимого (это на 35 байт меньше, чем gif, и оно может служить той же цели):

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)
}
person orcaman    schedule 03.09.2014