【问题标题】:How to create jpg/png image from base64 string in file system using golang如何使用 golang 从文件系统中的 base64 字符串创建 jpg/png 图像
【发布时间】:2025-12-07 22:00:01
【问题描述】:

我正在使用 Angular 将来自 Rest 调用的 base64 字符串发送到 Golang 服务器。现在的问题是使用此字符串创建图像。

我的代码:

func (server *Server) uploadImage(w http.ResponseWriter, r *http.Request) {

    decoder := json.NewDecoder(r.Body)
    defer r.Body.Close()
    var d model.ImageFile
    err := decoder.Decode(&d)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    fmt.Println(d.Source)
    fmt.Println(d.Destination)
    fmt.Println(d.Country)

    dir, errr := filepath.Abs(filepath.Dir(os.Args[0]))
    if errr != nil {
        fmt.Println(errr)
    }
    substring := dir[0:(len(dir) - 10)]

    unbased, err := base64.StdEncoding.DecodeString(d.ImageData)
    if err != nil {
        fmt.Println("Cannot decode b64")
    }

    r = bytes.NewReader(unbased)
    im, err := png.Decode(r)
    if err != nil {
        fmt.Println("Bad png")
    }

    f, err := os.OpenFile(substring+"images/"+"example.png", os.O_WRONLY|os.O_CREATE, 777)
    if err != nil {
        fmt.Println("Cannot open file")
    }

    png.Encode(f, im)

    server.R.Text(w, http.StatusOK, d.ID.Hex())
    return
}

【问题讨论】:

标签: image go base64


【解决方案1】:

我会做这样的事情:

b := getB64PNG()
unbased, err := base64.StdEncoding.DecodeString(b)
if err != nil {
    panic("Cannot decode b64")
}

r := bytes.NewReader(unbased)
im, err := png.Decode(r)
if err != nil {
    panic("Bad png")
}

f, err := os.OpenFile("example.png", os.O_WRONLY|os.O_CREATE, 0777)
if err != nil {
    panic("Cannot open file")
}

png.Encode(f, im)

【讨论】:

  • 嗨,我正在从角度发送 base64 图像数据作为 json fromat。
  • 好吧,那么你的 json 应该有一个带有那个 base64 的字段。使函数“getB64PNG()”返回
  • 嗨,我正在将 base64 图像数据作为 json fromat 从 angular 发送。我正在使用以下代码解码器从 http 请求中获取:= json.NewDecoder(r.Body) defer r.Body.Close( ) var d model.ImageFile err := decoder.Decode(&d) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return }
  • 我使用上面的代码(由你编写)给了我错误。我正在使用以下代码 unbased, err := base64.StdEncoding.DecodeString(d.ImageData) if err != nil { fmt.Println("Cannot decode b64") } r = bytes.NewReader(unbased) im, err : = png.Decode(r) if err != nil { fmt.Println("Bad png") } f, err := os.OpenFile(substring+"images/"+"example.png", os.O_WRONLY|os. O_CREATE, 777) if err != nil { fmt.Println("无法打开文件") } png.Encode(f, im)
  • 这里是::::::::"deals_get.go:108: 不能使用 bytes.NewReader(unbased) (type *bytes.Reader) as type *http.Request in assignment deal_get .go:109:不能在 png.Decode 的参数中使用 r(类型 *http.Request)作为类型 io.Reader:*http.Request 未实现 io.Reader(缺少读取方法)“致命:命令“构建”失败: 退出状态 2
最近更新 更多