Completed
Push — master ( fd8346...c1962d )
by
unknown
08:45 queued 06:48
created

DownloadUtility::getStreamedResponse()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 18
ccs 12
cts 12
cp 1
rs 9.4285
c 1
b 0
f 0
cc 2
eloc 11
nc 1
nop 2
crap 2
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
     * @return StreamedResponse
37
     */
38 1
    public function getStreamedResponse(MediaInterface $media, DownloadParameterBag $parameterBag)
39
    {
40 1
        $this->parameterHandler->validateParameterBag($media, $parameterBag);
41
42 1
        $response = new StreamedResponse(function () use ($media) {
43 1
            $fileHandle = $this->filesystem->readStream($media->getProviderReference());
44 1
            while (!feof($fileHandle)) {
45 1
                echo fread($fileHandle, 1024);
46
            }
47 1
            fclose($fileHandle);
48 1
        });
49 1
        $response->headers->set('Content-Disposition', $response->headers->makeDisposition(
50 1
            ResponseHeaderBag::DISPOSITION_ATTACHMENT,
51 1
            $media->getProviderMetaData()['originalName']
52
        ));
53
54 1
        return $response;
55
    }
56
}
57