Go 接收未知大小文件并转为对应大小的byte字节流

前言

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小僵尸打字员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值