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

简介: 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()


目录
相关文章
|
5月前
|
Go API
一文搞懂Go读写Excel文件
一文搞懂Go读写Excel文件
151 0
|
5月前
|
XML JavaScript 数据格式
打开 XML 文件报错 There is no Unicode byte order mark
打开 XML 文件报错 There is no Unicode byte order mark
|
11月前
|
Go 区块链
go 编译 自定义 图标 ico文件
go 编译 自定义 图标 ico文件
81 0
|
2月前
|
JSON 机器人 Go
go接收alertmanager告警并发送钉钉
go接收alertmanager告警并发送钉钉
|
2月前
|
XML 设计模式 JSON
Go - 关于 proto 文件的一点小思考?
Go - 关于 proto 文件的一点小思考?
34 0
|
4月前
|
JavaScript
vue : 无法加载文件 D:\module\npm_module\npm_modules\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
vue : 无法加载文件 D:\module\npm_module\npm_modules\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
|
4月前
|
监控 Go
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
|
4月前
|
存储 监控 算法
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
|
4月前
|
Go
Go语言进阶篇——文件
Go语言进阶篇——文件
|
4月前
|
Go
如何理解Go语言中的值接收者和指针接收者?
Go语言中,函数和方法可使用值或指针接收者。值接收者是参数副本,内部修改不影响原值,如示例中`ChangeValue`无法改变`MyStruct`的`Value`。指针接收者则允许修改原值,因为传递的是内存地址。选择接收者类型应基于是否需要修改参数,值接收者用于防止修改,指针接收者用于允许修改。理解这一区别对编写高效Go代码至关重要。