我正在尝试将视频上传到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()
答案 0 :(得分:4)
这实际上与go-tus
client有关。
Cloudflare的示例从tus.Upload
创建了一个*os.File
,但是我不考虑将multipart.File
转换为*os.File
,而是考虑了其他功能{{ 1}}提供了获取go-tus
的功能。
看看docs
,您应该考虑以下两个:
tus.Upload
func NewUpload(reader io.Reader, size int64, metadata Metadata, fingerprint string) *Upload
考虑func NewUploadFromBytes(b []byte) *Upload
实现了multipart.File
接口,您可以同时使用这两种接口。最佳选择取决于您的用例,但是如果要上传的文件的大小超过几十KB,则应该io.Reader
。 NewUpload
会强制您首先将整个文件读入内存。
如果您需要一些关于NewUploadFromBytes
,size
和metadata
自变量的灵感,请查看implementation of NewUploadFromFile
。