gpt4 book ai didi

go - 如何在 Golang 中将类型 multipart.File 转换为 *os.File

转载 作者:IT王子 更新时间:2023-10-29 01:34:20 74 4
gpt4 key购买 nike

我正在尝试将视频上传到 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 提供的用于获取 tus.Upload 的其他函数。

查看 docs ,你应该考虑这两个:

  • func NewUpload(reader io.Reader, size int64, metadata Metadata, fingerprint string) *上传
  • func NewUploadFromBytes(b []byte) *上传

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

如果您需要一些关于sizemetadatafingerprint 参数应该包含的内容的灵感,请查看 implementation of NewUploadFromFile .

关于go - 如何在 Golang 中将类型 multipart.File 转换为 *os.File,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56936861/

74 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com