前言

场景是我的接口需要接收一个文件, 我需要把他转为 []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()