将 base64 编码的字符串视频保存到磁盘



为了保存通过json上传的视频,我想出了这个功能:

func SaveBase64VidToDisk(vidString string) (interface{}, error) {
    vidExt := strings.ToLower(strings.Split(strings.Split(vidString, ";")[0], "/")[1])
    vidData := strings.Split(vidString, ";base64,")[1]
    vidReader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(vidData))
    fmt.Println("vidEXT is:", videExt)
    dir, err := os.Getwd()
    if err != nil {
        log.Fatal(err)
    }
    destDir := "/media/videos/"
    path := dir + destDir
    vidFileName := getRandomFileName("randomstr") + "." + vidExt
    vidFile, err := os.Create(path + vidFileName)
    if err != nil {
        fmt.Println(err)
        return nil, err
    }
    defer vidFile.Close()
    if _, err := vidFile.Write(vidData); err != nil {
        fmt.Println("error saving video")
        panic(err)
        return nil, nil
    }
    return vidFileName, nil
}
func getRandomFileName(prefix string) string {
    rand.Seed(time.Now().UTC().UnixNano())
    l := len(prefix)
    result := make([]byte, l)
    for i := 0; i < l; i++ {
        result[i] = CHARS[rand.Intn(len(CHARS))]
    }
    return string(result)
}

但是,这会产生错误:

shared/saveimage.go:117: cannot use vidData (type string) as type []byte in argument to vidFile.Write

诚然,我不知道我应该使用什么解码器来保存数据SaveBase64VidToDisk所以在黑暗中关闭,所以感谢您帮助解决这个问题。

不起作用,因为vidData是一个包含base64编码视频的字符串。你想要的是 从 vidReader 中读取数据并保存。这是一个io。读取器,以便您可以使用读取功能从中读取数据。

或者,使用 base64 包中的解码字符串函数将其直接读取到[]byte中。

data, _ := base64.StdEncoding.DecodeString(vidData)
vidFile.Write(data)

你可能只做

vidFile.Write([]byte(vidData))

编辑:哦,我明白了,我以为你真的想保存视频base64编码。 听起来你想做:

data := []byte{}
base64.StdEncoding.Decode(data, vidData)
vidFile.Write(data)

最新更新