Загрузка файлов Laravel 5: stream () или download ()

У меня есть приложение Laravel 5.4, в котором прошедшие проверку пользователи должны иметь возможность загружать личные файлы из хранилища S3. Я установил маршрут и контроллер, чтобы разрешить частную загрузку файлов.

Код выглядит так:

Route:

  Route :: get ('file/{filename  } ',' FileController @ download ') -> where ([' filename '=>' [A-Za-z0-9 -._ /] + ']) -> name (' file ') -> промежуточное ПО (  'auth: employee');  

Контроллер:

  загрузка общедоступной функции ($ fileName) {if (! $ fileName |  |! Хранение :: существует ($ fileName)) {abort (404);  } return response () -> stream (function () use ($ fileName) {$ stream = Storage :: readStream ($ fileName); fpassthru ($ stream); if (is_resource ($ stream)) {fclose ($ stream)  ;}}, 200, ['Cache-Control' => 'must-revalidate, post-check = 0, pre-check = 0', 'Content-Type' => Storage :: mimeType ($ fileName), 'Content  -Length '=> Storage :: size ($ fileName),' Content-Disposition '=>' attachment; filename = "'. Basename ($ fileName).'" ',' Pragma '=>' public ',])  ;}  

Все работает нормально, но когда я поближе познакомился с документами Laravel, я обнаружил, что они просто говорят о response () -> download ( ) .

Если я реализую такой ответ, мой код будет выглядеть так:

  загрузка общедоступной функции ($ fileName) {if (! $  имя_файла ||! Хранение :: существует ($ имя_файла)) {прерывание (404);  } $ file = Storage :: get ($ fileName);  return response () -> download ($ file, $ fileName, ['Content-Type' => Storage :: mimeType ($ fileName),]);}  

Обе функции можно найти в документации по API.

Мой вопрос: какой путь будет предпочтительнее и каковы преимущества/недостатки каждого из них?

Из чего я На данный момент собрано:

Stream:

  • Не требует загрузки всего файла в память
  • Подходит для больших файлов

Скачать:

  • Требуется меньше кода

Когда вы вызываете помощник Laravel response () , он возвращает экземпляр Освещение Routing ResponseFactory . ResponseFactory имеет эти два метода: download и stream — два рассматриваемых метода. Если копнуть немного глубже, вы увидите, что download возвращает экземпляр Symfony Component HttpFoundation BinaryFileResponse , а stream возвращает Symfony Component HttpFoundation StreamedResponse — это оба компонента Symfony.

Копаться в коде здесь необязательно , но хорошо понимать, что происходит под капотом. Теперь, когда мы знаем, что базовые объекты возвращаются из HTTP-компонента Symfony, мы можем проконсультироваться с документами Symfony и посмотреть, что они рекомендуют использовать.. Обычно потоки используются, когда размер файла неизвестен, например, когда вы генерируете файл на лету. В большинстве других случаев BinaryFileResponse , сгенерированный методом download , будет достаточно для ваших нужд.

Вы можете воспользоваться посмотрите здесь гораздо более подробное объяснение HTTP Streaming и его вариантов использования.



Файлы, которые можно хранить на Google Диске

Хотите получить больше от Google Диска для работы или учебы? Подпишитесь на бесплатную пробную версию Google Workspace.

Размеры файлов

Ниже приведены максимальные размеры файлов, которые вы можете хранить на Google Диске:

Документы

  • До 1,02 миллиона символов.
  • Если вы конвертируете текстовый документ в формат Google Docs, он может иметь размер до 50 МБ.

Таблицы

  • До 5 миллионов ячеек или 18 278 столбцов (столбец ZZZ) для электронных таблиц, которые созданы или преобразованы в Google Таблицы.
  • До 5 миллионов ячеек или 18 278 столбцов для электронных таблиц, импортированных из Microsoft Excel. Ограничения одинаковы для импорта в Excel и CSV.
    • Если какая-либо одна ячейка содержит более 50 000 символов, эта отдельная ячейка не будет загружена.

Презентации

  • До 100 МБ для презентаций, преобразованных в Google Slides.

Сайты Google (новые)

  • До 200 000 символов на странице.
  • До 10 000 изображений на сайте.
  • До 1000 страниц (максимум 10 миллионов символов).

Все остальные файлы

  • До 5 ТБ.

Поддерживаемые типы файлов

На Диске можно хранить файлы любого типа. Это наиболее распространенные типы файлов, которые можно предварительно просмотреть на Google Диске:

Общие файлы

  • Архивные файлы (.ZIP, .RAR, tar, gzip)
  • Аудиоформаты (MP3, MPEG, WAV, .ogg, .opus)
  • Изображение файлы (.JPEG, .PNG, .GIF, .BMP, .TIFF, .SVG)
  • Разметка/код (.CSS, .HTML, .PHP, .C, .CPP, .H , .HPP, .JS, .java, .py)
  • Текстовые файлы (.TXT)
  • Видео файлы (WebM, .MPEG4, .3GPP, .MOV , .AVI, .MPEGPS, .WMV, .FLV, .ogg)

Файлы Adobe

  • Autodesk AutoCad (.DXF)
  • Illustrator (.AI)
  • Photoshop (.PSD)
  • Формат переносимого документа (.PDF)
  • PostScript (.EPS, .PS)
  • Масштабируемая векторная графика (.SVG)
  • Формат файла изображения с тегами (.TIFF) — лучше всего подходит для изображений RGB .TIFF
  • TrueType (.TTF)

файлы Microsoft

  • Excel (.XLS и .XLSX)
  • PowerPoint ( .PPT и .PPTX)
  • Word (.DOC и .DOCX)
  • XML Paper Specification (. XPS)
  • Файлы Microsoft Office, защищенные паролем

Файлы Apple

  • Файлы редактора (.key, .numbers)
Было ли это полезно?
Как мы можем это улучшить?
Оцените статью
clickpad.ru
Добавить комментарий