Completed
Push — master ( c5041c...dff1db )
by
unknown
27:23
created

DownloadUtility   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 3
lcom 1
cbo 5
dl 0
loc 45
ccs 0
cts 21
cp 0
rs 10
c 2
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getStreamedResponse() 0 18 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
    public function __construct(ParameterHandlerInterface $parameterHandler, FilesystemInterface $filesystem)
29
    {
30
        $this->parameterHandler = $parameterHandler;
31
        $this->filesystem = $filesystem;
32
    }
33
34
    /**
35
     * @param MediaInterface $media
36
     * @return StreamedResponse
37
     */
38
    public function getStreamedResponse(MediaInterface $media, DownloadParameterBag $parameterBag)
39
    {
40
        $this->parameterHandler->validateParameterBag($media, $parameterBag);
41
42
        $response = new StreamedResponse(function () use ($media) {
43
            $fileHandle = $this->filesystem->readStream($media->getProviderReference());
44
            while (!feof($fileHandle)) {
45
                echo fread($fileHandle, 1024);
46
            }
47
            fclose($fileHandle);
48
        });
49
        $response->headers->set('Content-Disposition', $response->headers->makeDisposition(
50
            ResponseHeaderBag::DISPOSITION_ATTACHMENT,
51
            $media->getProviderMetaData()['originalName']
52
        ));
53
54
        return $response;
55
    }
56
}
57