我試圖在GoLang中使用Base 64顯示影像。我看了很多例子,都是同樣的模式。下面是我的代碼:
{{template "base" .}}。
{{define "content"}}}
{{$item := index .Data "item"}}
{{$image := index .Data "image"}}}
<img src="data:image/png;base64," {{$image.ImageDataBase64}} alt="Blank"/>
{{$image.ImageDataBase64}}的內容。
{{end}}。
注意,我首先嘗試使用base64來顯示圖片,然后我列印base64,以確保一切正常。下面是我得到的結果。
因此,它實際上顯示base64,但當我在標簽中插入base64時,它并沒有顯示影像。為什么?
以下是我創建base64的方法:
package images
import (
"bytes"/span>
"encoding/base64"/span>
"fmt"/span>
"image/jpeg"
"image/png" "image/png"
"io/ioutil">
"log"/span>
"net/http"> var TmpDirectory string // Temorary Directory where all images in current session will be stored
func setupCorsResponse(w *http.ResponseWriter, r *http.Request) {
(*w).Header().Set("Access-Control-Allow-Origin"/span>, "*"/span>)
(*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE" /span>)
(*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Authorization" )
}
func HandleUpload(w http.ResponseWriter, r *http. Request, formFileName string) (string, string, error> {
//最多上傳10MB的檔案 r.ParseMultipartForm(1 << 2)
file, handler, err := r.FormFile(formFileName)
if err != nil {
//如果有一個錯誤,意味著表單是空的。對于Err,按順序回傳nil。
///按要求驗證結果。
return ""/span>, ""/span>, nil
}
defer file.Close()
fmt.Printf("Uploaded File: % v
", handler.Filename)
fmt.Printf("檔案大小:% v
", handler.Size)
fmt.Printf("MIME Header: % v
", handler.Header)
data, err := ioutil.ReadAll(file)
if err != nil {
log.Println(err)
return ""/span>, ""/span>, err
}
contentType := http.DetectContentType(data)
switch contentType {
case "image/png"/span>:
fmt.Println("Image type is already PNG." )
case "image/jpeg":
fmt.Println("影像型別是JPG,將其轉換為PNG。")
img, err := jpeg.Decode(byte.NewReader(data))
if err != nil {
return "", "", fmt.Errorf(" unable to decode jpeg: %w", err)
}
var buf bytes.Buffer
if err := png.Encode(&buf, img); err != nil {
return "", "", fmt.Errorf(" unable to encode png")
}
data = buf.Bytes()
default:
return "", "", fmt.Errorf("unsupported content type: %s", contentType)
}
//convert the buffer bytes to base64 string - use buf.Bytes() for new image。
imgBase64Str := base64.StdEncoding.EncodeToString(data)
return handler.Filename, imgBase64Str, nil
}
我在這里做錯了什么?
uj5u.com熱心網友回復:
Blank顯示是因為你的失敗圖片的alt文本是Blank。
<img src="data:image/png;base64," {{$image.ImageDataBase64}} alt="Blank"/>
給定一個 "AAAA "的值,你的模板輸出將是
。<img src="data: image/png;base64," AAAA alt="Blank"/>
你可能想要的東西需要一個簡單的改變:
<img src="data:image/png;base64,{{$image.ImageDataBase64}}"/span> alt="Blank"/span>/>
這將產生
<img src="data: image/png;base64,AAAA" alt="Blank"/>
記住,你不是在建立一個字串(或用 運算子連接),你只是輸出字串的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/313770.html
標籤:
上一篇:介面型別回傳
