登录
首页 >  Golang >  Go问答

将一个 multipart.File 转换为 *os.File 的方法在 Golang 中可以如何实现

来源:stackoverflow

时间:2024-03-24 18:27:41 416浏览 收藏

本文介绍了在 Golang 中将 multipart.File 转换为 *os.File 的方法。作者建议使用 go-tus 库,因为它提供了更直接的方法来从 io.Reader 创建 tus.Upload。具体来说,可以使用 NewUpload 或 NewUploadFromBytes 函数,其中 NewUpload 更适合处理大文件,因为它避免了将文件加载到内存中。

问题内容

我正在尝试将视频上传到 cloudflare,但在文档中他们使用 os.open 但在我的情况下用户通过 html 表单上传文件

golang cloudflare 文档:https://developers.cloudflare.com/stream/getting-started/uploading-golang/

file, err := c.FormFile("file")
if err != nil {
    log.Errorf("get file error: %s", err)
    return c.JSONStatus(http.StatusBadRequest)
}

sourceFile, err := file.Open()
if err != nil {
    log.Errorf("open file error: %s", err)
    return c.JSONStatus(http.StatusInternalServerError)
}

headers := make(http.Header)
headers.Add("X-Auth-Email", "***")
headers.Add("X-Auth-Key", "***")

config := &tus.Config{
    ChunkSize:           5 * 1024 * 1024, // Cloudflare Stream requires a minimum chunk size of 5MB.
    Resume:              false,
    OverridePatchMethod: false,
    Store:               nil,
    Header:              headers,
}

client, _ := tus.NewClient("https://api.cloudflare.com/client/v4/accounts/"+ accountID +"/media", config)

upload, _ := tus.NewUploadFromFile(sourceFile)

uploader, _ := client.CreateUpload(upload)

uploader.Upload()

解决方案


这实际上与go-tus client有关。

Cloudflare 的示例从 *os.File 创建 tus.Upload,但我不会尝试将 multipart.File“转换”为 *os.File,我会考虑 go-tus 提供的其他函数来获取a tus.Upload

查看 docs,您应该考虑以下两个:

  • func NewUpload(reader io.Reader, size int64, 元数据 Metadata, 指纹字符串) *Upload
  • func NewUploadFromBytes(b []byte) *Upload

考虑到 multipart.File 实现了 io.Reader 接口,您可以同时使用这两个接口。哪个最好取决于您的用例,但如果上传的文件大小超过几十 KB,您确实应该使用 NewUploadNewUploadFromBytes 强制您首先将整个文件读入内存。

如果您需要了解 sizemetadatafingerprint 参数应包含的内容,请查看 implementation of NewUploadFromFile

今天关于《将一个 multipart.File 转换为 *os.File 的方法在 Golang 中可以如何实现》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>