Completed
Pull Request — master (#30)
by
unknown
05:34
created

S3Manager::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 4
crap 1
1
<?php
2
3
namespace AppBundle\Aws;
4
5
use AppBundle\Entity\S3\Image;
6
use Aws\S3\S3Client;
7
use Psr\Log\LoggerInterface;
8
9
class S3Manager
10
{
11
    /**
12
     * @var S3Client
13
     */
14
    private $s3;
15
16
    /**
17
     * @var string
18
     */
19
    private $bucket;
20
21
    /**
22
     * @var LoggerInterface
23
     */
24
    private $logger;
25
26
    /**
27
     * @var string
28
     */
29
    private $prefix;
30
31 15
    public function __construct(S3Client $s3, $bucket, LoggerInterface $logger, $prefix)
32
    {
33 15
        $this->s3 = $s3;
34 15
        $this->bucket = $bucket;
35 15
        $this->logger = $logger;
36 15
        $this->prefix = $prefix;
37 15
    }
38
39
    public function upload(Image $image)
40
    {
41
        if (!$image->getContent()) {
42
            return $image;
43
        }
44
        $image->setS3key(sprintf('%s/%s', $this->prefix, $image->getS3key()));
45
        try {
46
            $result = $this->s3->putObject([
47
                'Bucket' => $this->bucket,
48
                'Key' => $image->getS3key(),
49
                'Body' => $image->getContent(),
50
                'ACL' => 'public-read-write',
51
                'ContentType' => $image->getContentType(),
52
            ]);
53
54
            $image->setUrl($result->get('ObjectURL'));
55
        } catch (\Exception $e) {
56
            $this->logger->error(
57
                'error write image to aws bucket',
58
                [
59
                    'bucket' => $this->bucket,
60
                    'key' => $image->getS3key(),
61
                    'file' => $image->getNameFile(),
62
                    'message' => $e->getMessage(),
63
                ]
64
            );
65
        }
66
67
        return $image;
68
    }
69
70
    public function removeImage($key)
71
    {
72
        try {
73
            $this->s3->deleteMatchingObjects($this->bucket, $key);
74
        } catch (\Exception $e) {
75
            $this->logger->error(
76
                'error delete image from aws bucket',
77
                [
78
                    'bucket' => $this->bucket,
79
                    'key' => $key,
80
                    'message' => $e->getMessage(),
81
                ]
82
            );
83
        }
84
    }
85
}
86