2016-12-14 64 views
-2

我想呈現在golang的base64圖像(這裏的Twitter圖標)從BASE64渲染圖像中golang

package main 

import (
    base64 "encoding/base64" 
    "fmt" 
    "io" 
    "net/http" 
    "strconv" 
) 

func pix(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) 
    var cookie *http.Cookie 
    cookie, err := r.Cookie("csrftoken") 
    if err != nil { 
     fmt.Printf("error") 
     fmt.Println(err) 
    } 
    fmt.Printf(cookie.Value) 
    w.Header().Set("Content-Type", "image/jpeg") 
    p, err := base64.StdEncoding.DecodeString("iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAADMUlEQVRYw+2YTUgUYRjHZzOJIoNA+rrUyYNIRQgRHaLo4qFDBEGeunSxS9TFU0QEnhIh6IvokrUzO2uamRmbG6XmR/mVaKZpZVbYvvO143zszsxOz+yahNm+785sITEP72F3Z+adH8/zf5+PpagwtxKXj+Vj+Vg+lo/lY+W+WI4KpddKwWIQFUSF97nNLcLGZt75SiOHchEXfskDVmYjlowpiEoei3UT2ljcFJOpOd169C1Z2SuvgsdpB7cgzB16EV/byGM2xDIVPxQujKmBDF/2m2l0vFvmEin7N2v8kiiPiOeGlGHRvP1RdxA9eYtGR7pk2Pf6lI7RCoP2RaWkZWe3fsFc18hvesAHPGEFUc24ltnx3kyiCJwfRMs6dTXLdSIjO9Osal18qzKfE5V9coDxhlU7qS3uOyiaB55JDtkS2TKoLCLaOLPS4b02pQdCHiUfRKf653/d2kjZN6f10jYxI2EnrGk5H+2WsVi6ZZ8fVSmGQKaYyyFuR6ugmUtVrJo2C7HokeGq8447sYpOPBbo3XFzKC95626sZlz905sUM9XLGbXvtKtTOhZrQDApkhNNkiAOPo/viojh2YSZsj1aF2eQ5n2stuomNQjiiGQanrFufdCXP8gu8tbhjridJ6saVPKExXJrwlwfb3pnAg2Ut0tEBZFI8gza81Tik15DCDIoINQ7aQdBo90RMfrdwNaWLFY9opJGkBQrhCA/HXspQ8W1XHkN6vfWFiGH9ouwhdpJUFuy2JX3eg6uyqENpNHZYcUd02jcLMI2WO67UwZVv1G1HLMq3L83KuEbLPdY7IL2L42p0MMQiuzkq/ncwucOi6qPbWkWoPfCUsENpweUnP1EmE4XGhgagT72RyXolkSCHBbTU3By3fgJj8VyJW3CmSHl8oTWMJuYUUizVvtcsuyJ6J4J663CMLevXar/lJgnKNSgbphzKjriTn5i0F8eX9ODXnEzf6JHvjGtv+aNGdWCOEKnJRmpr5oFVQV8WTWglIKHMlPhv5uqQ1xGYfB5fRMPo+n2VmFbi7ChiS9oWBhZvXrI01TNLg7yPxt51v9rxMfysXwsH8vH+g+wfgDUr+5LcyNV4AAAAABJRU5ErkJggg==") 
    if err != nil { 
     http.Error(w, "internal error", 500) 
     return 
    } 
    w.Header().Set("Content-Length", strconv.Itoa(len(p))) //len(dec) 
    io.WriteString(w, string(p)) 
} 

func main() { 
    http.HandleFunc("/pix/", pix) 
    err := http.ListenAndServe(":9080", nil) 
    if err != nil { 
     fmt.Println(err) 
    } 
} 

但它不會顯示任何東西,當我嘗試去URL ;它會下載一個包含錯誤的文件。任何人都有任何想法,爲什麼這是?

+4

這不是問題,但你應該用更高效和更簡單的'w.Write(p)'替換'io.WriteString(w,string(p))' –

回答

6

您正在向客戶端寫入數據,而不是圖像。具體而言,該行:

fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) 

您瀏覽器嘗試呈現內容爲JPEG,但失敗了,因爲這些額外的數據,因此它會提示您下載它,而不是。將其刪除,圖片將正確顯示。

您還應該按照@Mellow Marmot的建議,並使用w.Write(p)而不是io.WriteString(w, string(p))