为了保存通过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是一个黑暗中的关闭,所以感谢您的帮助,以解决这个问题。
发布于 2017-11-02 03:30:27
这将无法工作,因为vidData是一个包含base64编码视频的字符串。您想要的是从vidReader读取数据,并保存它。它是一个io.Reader,所以您可以使用Read函数从它读取数据。
或者,使用base64包中的base64函数将其直接读取到[]byte中。
data, _ := base64.StdEncoding.DecodeString(vidData)
vidFile.Write(data)发布于 2017-11-02 03:00:53
你也许可以
vidFile.Write([]byte(vidData))编辑:哦,我明白了,我以为你真的想保存视频base64encoded。听起来你想做的事:
data := []byte{}
base64.StdEncoding.Decode(data, vidData)
vidFile.Write(data)https://stackoverflow.com/questions/47066801
复制相似问题