INTEGRITY Документация

Возобновляемая загрузка больших файлов (tus)

Если нужно загрузить видео размером более 200 МБ, используйте протокол tus ↗. Даже если видео меньше 200 МБ, но соединение может быть нестабильным, Cloudflare рекомендует использовать протокол tus, поскольку он поддерживает возобновление. Возобновляемая загрузка позволяет прервать её и продолжить позже без повторной передачи уже загруженных данных.

Чтобы использовать протокол tus для видео конечных пользователей, см. Direct Creator Uploads через tus.

Если ваше видео меньше 200 МБ, а соединение стабильно, можно использовать простой POST запрос вместо этого. Для прямой загрузки через API с использованием вашего API-токена см. Загрузка по ссылке. Для загрузок от конечных пользователей см. Простой POST-запрос для Direct Creator Uploads.

Требования

Предварительные требования

Прежде чем загружать видео с помощью tus, скачайте клиент tus.

Дополнительные сведения см. в Python-клиент tus ↗ который доступен через pip, менеджер пакетов Python.

Установка клиента Python
pip install -U tus.py

Загрузка видео с помощью tus

Загрузка с помощью tus
tus-upload --chunk-size 52428800 --header \
Authorization "Bearer <API_TOKEN>"
<PATH_TO_VIDEO> https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream
ответ tus
INFO Creating file endpoint
INFO Created: https://api.cloudflare.com/client/v4/accounts/d467d4f0fcbcd9791b613bc3a9599cdc/stream/dd5d531a12de0c724bd1275a3b2bc9c6
...

Пример на Golang

Перед началом работы подключите клиент tus, например go-tus ↗ для загрузки из приложений на Go.

go-tus библиотека не возвращает заголовки ответа вызывающей функции, из-за чего сложно получить ID видео из stream-media-id заголовок. В качестве обходного решения создайте Direct Creator Upload ссылку. Этот ответ API будет включать конечную точку TUS, а также ID видео. Задавать Creator ID не обязательно.

Загрузка с помощью Golang
package main

import (
	"net/http"
	"os"

	tus "github.com/eventials/go-tus"
)

func main() {
	accountID := "<ACCOUNT_ID>"

	f, err := os.Open("videofile.mp4")

	if err != nil {
		panic(err)
	}

	defer f.Close()

	headers := make(http.Header)
	headers.Add("Authorization", "Bearer <API_TOKEN>")

	config := &tus.Config{
		ChunkSize:           50 * 1024 * 1024, // Required a minimum chunk size of 5 MB, here we use 50 MB.
		Resume:              false,
		OverridePatchMethod: false,
		Store:               nil,
		Header:              headers,
		HttpClient:          nil,
	}

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

	upload, _ := tus.NewUploadFromFile(f)

	uploader, _ := client.CreateUpload(upload)

	uploader.Upload()
}

Вы также можете отслеживать прогресс загрузки, если она выполняется в горутине.

Получение прогресса загрузки
// returns the progress percentage.
upload.Progress()

// returns whether or not the upload is complete.
upload.Finished()

См. go-tus ↗ для таких функций, как возобновление загрузки.

Пример на Node.js

Перед началом работы установите tus-js-client.

npm i tus-js-client

Создайте index.js файл и настройте:

Настройка index.js
var fs = require("fs");
var tus = require("tus-js-client");

// Specify location of file you would like to upload below
var path = __dirname + "/test.mp4";
var file = fs.createReadStream(path);
var size = fs.statSync(path).size;
var mediaId = "";

var options = {
	endpoint: "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream",
	headers: {
		Authorization: "Bearer <API_TOKEN>",
	},
	chunkSize: 50 * 1024 * 1024, // Required a minimum chunk size of 5 MB. Here we use 50 MB.
	retryDelays: [0, 3000, 5000, 10000, 20000], // Indicates to tus-js-client the delays after which it will retry if the upload fails.
	metadata: {
		name: "test.mp4",
		filetype: "video/mp4",
		// Optional if you want to include a watermark
		// watermark: '<WATERMARK_UID>',
	},
	uploadSize: size,
	onError: function (error) {
		throw error;
	},
	onProgress: function (bytesUploaded, bytesTotal) {
		var percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
		console.log(bytesUploaded, bytesTotal, percentage + "%");
	},
	onSuccess: function () {
		console.log("Upload finished");
	},
	onAfterResponse: function (req, res) {
		return new Promise((resolve) => {
			var mediaIdHeader = res.getHeader("stream-media-id");
			if (mediaIdHeader) {
				mediaId = mediaIdHeader;
			}
			resolve();
		});
	},
};

var upload = new tus.Upload(file, options);
upload.start();

Укажите параметры загрузки

Протокол tus позволяет добавлять необязательные параметры в Upload-Metadata заголовок ↗.

Поддерживаемые параметры в Upload-Metadata

Установка произвольных значений метаданных в Upload-Metadata заголовок задает значения в ключ meta в Stream API.

Настройка свойства creator

Установка значения creator в Upload-Creator заголовок можно использовать для указания автора видеоконтента, связывая способ идентификации ваших пользователей или авторов с видео в вашей учетной записи Stream.

Примеры того, как задать и изменить Creator ID, см. в Привязка видео к авторам.

Получение идентификатора видео при использовании tus

При выполнении первоначального запроса tus Stream возвращает URL-адрес в Location заголовок. Хотя этот URL-адрес может содержать ID видео, не рекомендуется извлекать ID путем разбора этого URL-адреса.

Вместо этого используйте stream-media-id HTTP-заголовок в ответе, чтобы получить ID видео.

Например, запрос к https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream по протоколу tus будет содержать HTTP заголовок, подобный следующему:

stream-media-id: cab807e0c477d01baq20f66c3d1dfc26cf