You might want to let users be able to download multiple files at once. Traditionally you'd have to create a zip archive that contains the requested files.
The media library is able to zip stream multiple files on the fly. So you don't need to create a zip archive on your server.
The provided MediaStream class that allows you to respond with a stream. Files will be zipped on the fly and you can even include files from multiple filesystems.
Here's an example on how it can be used:
useSpatie\MediaLibrary\Support\MediaStream;classDownloadMediaController{publicfunctiondownload(YourModel $yourModel) {// Let's get some media. $downloads = $yourModel->getMedia('downloads');// Download the files associated with the media in a streamed way.// No prob if your files are very large.returnMediaStream::create('my-files.zip')->addMedia($downloads); }}
You can also pass any custom options to the ZipStream instance using the useZipOptions method.
useSpatie\MediaLibrary\Support\MediaStream;classDownloadMediaController{publicfunctiondownload(YourModel $yourModel) {// Let's get some media. $downloads = $yourModel->getMedia('downloads');// Download the files associated with the media in a streamed way.// No prob if your files are very large.returnMediaStream::create('my-files.zip')->useZipOptions(function(&$zipOptions) {if (is_array($zipOptions)) {// ZipStream ^3.0 uses array $zipOptions['defaultEnableZeroHeader'] =true; } else {// ZipStream ^2.0 uses \ZipStream\Option\Archive/** @var\ZipStream\Option\Archive $zipOptions */ $zipOptions->setZeroHeader(true); } })->addMedia($downloads); }}