Как преобразовать тип multipart.File в * os.File в Golang - PullRequest
2 голосов
/ 08 июля 2019

Я пытаюсь загрузить видео в 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()

1 Ответ

4 голосов
/ 08 июля 2019

Это на самом деле связано с go-tus клиентом .

Пример Cloudflare создает tus.Upload из *os.File, но вместо того, чтобы пытаться "преобразовать" ваш multipart.File * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * *1013* * * * * * * Вы должны рассмотреть эти две:

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

Учитывая, что multipart.File реализует интерфейс io.Reader, вы можете использовать оба из них.Что лучше всего, зависит от вашего варианта использования, но если размер загружаемых файлов превышает несколько десятков КБ, вам действительно нужно NewUpload.NewUploadFromBytes вынуждает вас сначала прочитать весь файл в память.

Если вам нужно вдохновение для того, что должны содержать аргументы size, metadata и fingerprint, посмотрите на реализация NewUploadFromFile.

...