Laravel загружает файлы асинхронно

Я довольно хорошо знаком с Laravel Queues и управляю асинхронной логикой в ​​Laravel, планируя задания.

Веб-сайт, который я создаю, должен обрабатывать большие видеофайлы, поэтому мне нужно, чтобы эти загрузки были асинхронными, теперь пользователи ждут загрузки своего файла от 5 до 10 минут.

Это возможно? Как это будет реализовано в очереди Laravel? Что отправляется на сервер в запросе?

Я не могу найти в Google ничего, что могло бы решить эту проблему, поэтому я просто ищу общие рекомендации.

В идеале пользователь должен выбрать свой файл, щелкнуть кнопку "загрузить", после чего запланировано задание на загрузку файла и уведомление пользователя по электронной почте о завершении.

Спасибо!

1 ответ

Решение

Для загрузки файлов страница, которая инициировала загрузку, должна оставаться открытой в течение всего периода загрузки. Это само по себе имеет смысл, потому что в противном случае, если пользователь захочет закрыть страницу в процессе загрузки, вы можете "украсть" загружаемый файл независимо от действий пользователя.

Единственный практический подход здесь - позволить пользователю выбирать файлы и загружать их, используя запрос XHR, что-то вроде:

var payload = new FormData();
payload.append('file', document.getElementById('fileInput'));

var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);

xhr.addEventListener('load', function (e) {
    // Do stuff when upload is complete
});

xhr.send(payload);

Загрузка файлов асинхронно, позволяет пользователю выполнять другие действия на той же странице в ожидании завершения загрузки (например, заполнить дополнительные данные, необходимые для загрузки).

Другие вопросы по тегам