DownloadUtility::getStreamedResponse()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 21
ccs 14
cts 14
cp 1
rs 9.584
c 0
b 0
f 0
cc 3
nc 2
nop 2
crap 3
1
<?php
2
3
namespace MediaMonks\SonataMediaBundle\Utility;
4
5
use League\Flysystem\FilesystemInterface;
6
use MediaMonks\SonataMediaBundle\ParameterBag\DownloadParameterBag;
7
use MediaMonks\SonataMediaBundle\Handler\ParameterHandlerInterface;
8
use MediaMonks\SonataMediaBundle\Model\MediaInterface;
9
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
10
use Symfony\Component\HttpFoundation\StreamedResponse;
11
12
class DownloadUtility
13
{
14
    /**
15
     * @var ParameterHandlerInterface
16
     */
17
    private $parameterHandler;
18
19
    /**
20
     * @var FilesystemInterface
21
     */
22
    private $filesystem;
23
24
    /**
25
     * @param ParameterHandlerInterface $parameterHandler
26
     * @param FilesystemInterface $filesystem
27
     */
28 1
    public function __construct(ParameterHandlerInterface $parameterHandler, FilesystemInterface $filesystem)
29
    {
30 1
        $this->parameterHandler = $parameterHandler;
31 1
        $this->filesystem = $filesystem;
32 1
    }
33
34
    /**
35
     * @param MediaInterface $media
36
     * @param DownloadParameterBag $parameterBag
37
     *
38
     * @return StreamedResponse
39
     */
40 1
    public function getStreamedResponse(MediaInterface $media, DownloadParameterBag $parameterBag): StreamedResponse
41
    {
42 1
        $this->parameterHandler->validateParameterBag($media, $parameterBag);
43
44 1
        $response = new StreamedResponse(function () use ($media) {
45 1
            $fileHandle = $this->filesystem->readStream($media->getProviderReference());
46 1
            while (!feof($fileHandle)) {
47 1
                echo fread($fileHandle, 1024);
48
            }
49 1
            fclose($fileHandle);
50 1
        });
51 1
        $response->headers->set('Content-Disposition', $response->headers->makeDisposition(
52 1
            ResponseHeaderBag::DISPOSITION_ATTACHMENT,
53 1
            $media->getProviderMetaData()['originalName']
54
        ));
55 1
        if (!empty($media->getProviderMetaData()['mimeType'])) {
56 1
            $response->headers->set('Content-Type', $media->getProviderMetaData()['mimeType']);
57
        }
58
59 1
        return $response;
60
    }
61
}
62