前言
场景是我的接口需要接收一个文件, 我需要把他转为 []byte 类型, 但是我不知道文件的大小, 用make创建的不能动态扩容, 导致如果我写死的话所有文件都会变成我写死的那个大小, 造成资源浪费
解决方案一
// 接受文件 file, _, _ := ctx.FormFile("file_stream") // 解析文件 fil := make([][]byte, 0) var b int64 = 0 // 通过for循环写入 for { buffer := make([]byte, 1024) n, err := file.ReadAt(buffer, b) b = b + int64(n) fil = append(fil, buffer) if err != nil { fmt.Println(err.Error()) break } } // 生成最后的文件字节流 fileStream := bytes.Join(fil, []byte(""))
解决方案二(建议)
var ( file, _, _ = ctx.FormFile("file_stream") buff = new(bytes.Buffer) ) _, _ = io.copy(buff, file) buff.Bytes()