Skip to content

Commit 3cddeba

Browse files
buskamuzaakaplya
authored andcommitted
Storage library update
1 parent 7957ad1 commit 3cddeba

File tree

18 files changed

+678
-208
lines changed

18 files changed

+678
-208
lines changed

app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery/Content.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
*/
1414
namespace Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Gallery;
1515

16-
use Magento\Backend\Block\DataProviders\ImageUploadConfig as ImageUploadConfigDataProvider;
16+
use League\Flysystem\FileNotFoundException;
17+
use Magento\Framework\App\ObjectManager;
1718
use Magento\Backend\Block\Media\Uploader;
19+
use Magento\Framework\Storage\StorageProvider;
20+
use Magento\Framework\View\Element\AbstractBlock;
1821
use Magento\Framework\App\Filesystem\DirectoryList;
19-
use Magento\Framework\App\ObjectManager;
2022
use Magento\Framework\Exception\FileSystemException;
21-
use Magento\Framework\View\Element\AbstractBlock;
2223
use Magento\MediaStorage\Helper\File\Storage\Database;
2324

2425
/**
@@ -55,6 +56,10 @@ class Content extends \Magento\Backend\Block\Widget
5556
* @var Database
5657
*/
5758
private $fileStorageDatabase;
59+
/**
60+
* @var StorageProvider
61+
*/
62+
private $storageProvider;
5863

5964
/**
6065
* @var \Magento\Framework\Filesystem\Directory\ReadInterface
@@ -65,6 +70,7 @@ class Content extends \Magento\Backend\Block\Widget
6570
* @param \Magento\Backend\Block\Template\Context $context
6671
* @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
6772
* @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
73+
* @param StorageProvider $storageProvider
6874
* @param array $data
6975
* @param ImageUploadConfigDataProvider $imageUploadConfigDataProvider
7076
* @param Database $fileStorageDatabase
@@ -73,6 +79,7 @@ public function __construct(
7379
\Magento\Backend\Block\Template\Context $context,
7480
\Magento\Framework\Json\EncoderInterface $jsonEncoder,
7581
\Magento\Catalog\Model\Product\Media\Config $mediaConfig,
82+
StorageProvider $storageProvider,
7683
array $data = [],
7784
ImageUploadConfigDataProvider $imageUploadConfigDataProvider = null,
7885
Database $fileStorageDatabase = null
@@ -85,6 +92,7 @@ public function __construct(
8592
?: ObjectManager::getInstance()->get(ImageUploadConfigDataProvider::class);
8693
$this->fileStorageDatabase = $fileStorageDatabase
8794
?: ObjectManager::getInstance()->get(Database::class);
95+
$this->storageProvider = $storageProvider;
8896
}
8997

9098
/**

app/code/Magento/Catalog/Block/Product/Gallery.php

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@
1111
*/
1212
namespace Magento\Catalog\Block\Product;
1313

14+
use League\Flysystem\FileNotFoundException;
1415
use Magento\Catalog\Model\Product;
15-
use Magento\Framework\App\Filesystem\DirectoryList;
16+
use Magento\Catalog\Model\Product\Media\Config;
17+
use Magento\Framework\App\ObjectManager;
1618
use Magento\Framework\Data\Collection;
19+
use Magento\Framework\Registry;
20+
use Magento\Framework\Storage\StorageProvider;
1721

1822
/**
1923
* Product gallery block
@@ -26,22 +30,37 @@ class Gallery extends \Magento\Framework\View\Element\Template
2630
/**
2731
* Core registry
2832
*
29-
* @var \Magento\Framework\Registry
33+
* @var Registry
3034
*/
3135
protected $_coreRegistry = null;
3236

37+
/**
38+
* @var StorageProvider
39+
*/
40+
private $storageProvider;
41+
/**
42+
* @var Config
43+
*/
44+
private $mediaConfig;
45+
3346
/**
3447
* @param \Magento\Framework\View\Element\Template\Context $context
35-
* @param \Magento\Framework\Registry $registry
48+
* @param Registry $registry
3649
* @param array $data
50+
* @param StorageProvider $storageProvider
51+
* @param Config $mediaConfig
3752
*/
3853
public function __construct(
3954
\Magento\Framework\View\Element\Template\Context $context,
40-
\Magento\Framework\Registry $registry,
41-
array $data = []
55+
Registry $registry,
56+
array $data = [],
57+
StorageProvider $storageProvider = null,
58+
Config $mediaConfig = null
4259
) {
4360
$this->_coreRegistry = $registry;
4461
parent::__construct($context, $data);
62+
$this->storageProvider = $storageProvider ?? ObjectManager::getInstance()->get(StorageProvider::class);
63+
$this->mediaConfig = $mediaConfig ?? ObjectManager::getInstance()->get(Config::class);
4564
}
4665

4766
/**
@@ -121,16 +140,24 @@ public function getImageFile()
121140
*/
122141
public function getImageWidth()
123142
{
124-
$file = $this->getCurrentImage()->getPath();
125-
126-
if ($this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->isFile($file)) {
127-
$size = getimagesize($file);
128-
if (isset($size[0])) {
129-
if ($size[0] > 600) {
143+
$file = $this->getCurrentImage()->getFile();
144+
if (!$file) {
145+
return false;
146+
}
147+
$productMediaFile = $this->mediaConfig->getMediaPath($file);
148+
149+
$mediaStorage = $this->storageProvider->get('media');
150+
if ($mediaStorage->has($productMediaFile)) {
151+
try {
152+
$meta = $mediaStorage->getMetadata($productMediaFile);
153+
$size = $meta['size'];
154+
if ($size > 600) {
130155
return 600;
131156
} else {
132-
return (int) $size[0];
157+
return (int) $size;
133158
}
159+
} catch (FileNotFoundException $e) {
160+
return false;
134161
}
135162
}
136163

app/code/Magento/Catalog/Controller/Adminhtml/Product/Gallery/Upload.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
99
use Magento\Framework\App\Filesystem\DirectoryList;
1010
use Magento\Framework\App\ObjectManager;
11-
use Magento\Framework\Exception\LocalizedException;
11+
use Magento\Framework\Storage\StorageProvider;
1212

1313
/**
1414
* Upload product image action controller
@@ -52,16 +52,23 @@ class Upload extends \Magento\Backend\App\Action implements HttpPostActionInterf
5252
*/
5353
private $productMediaConfig;
5454

55+
/**
56+
* @var StorageProvider
57+
*/
58+
private $storageProvider;
59+
5560
/**
5661
* @param \Magento\Backend\App\Action\Context $context
5762
* @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
63+
* @param StorageProvider $storageProvider
5864
* @param \Magento\Framework\Image\AdapterFactory $adapterFactory
5965
* @param \Magento\Framework\Filesystem $filesystem
6066
* @param \Magento\Catalog\Model\Product\Media\Config $productMediaConfig
6167
*/
6268
public function __construct(
6369
\Magento\Backend\App\Action\Context $context,
6470
\Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
71+
StorageProvider $storageProvider,
6572
\Magento\Framework\Image\AdapterFactory $adapterFactory = null,
6673
\Magento\Framework\Filesystem $filesystem = null,
6774
\Magento\Catalog\Model\Product\Media\Config $productMediaConfig = null
@@ -74,6 +81,7 @@ public function __construct(
7481
->get(\Magento\Framework\Filesystem::class);
7582
$this->productMediaConfig = $productMediaConfig ?: ObjectManager::getInstance()
7683
->get(\Magento\Catalog\Model\Product\Media\Config::class);
84+
$this->storageProvider = $storageProvider;
7785
}
7886

7987
/**
@@ -84,6 +92,7 @@ public function __construct(
8492
public function execute()
8593
{
8694
try {
95+
/** @var \Magento\MediaStorage\Model\File\Uploader $uploader */
8796
$uploader = $this->_objectManager->create(
8897
\Magento\MediaStorage\Model\File\Uploader::class,
8998
['fileId' => 'image']
@@ -93,11 +102,18 @@ public function execute()
93102
$uploader->addValidateCallback('catalog_product_image', $imageAdapter, 'validateUploadFile');
94103
$uploader->setAllowRenameFiles(true);
95104
$uploader->setFilesDispersion(true);
105+
96106
$mediaDirectory = $this->filesystem->getDirectoryRead(DirectoryList::MEDIA);
107+
$baseImagePath = $this->productMediaConfig->getBaseTmpMediaPath();
97108
$result = $uploader->save(
98-
$mediaDirectory->getAbsolutePath($this->productMediaConfig->getBaseTmpMediaPath())
109+
$mediaDirectory->getAbsolutePath($baseImagePath)
99110
);
100111

112+
$origFile = $this->productMediaConfig->getTmpMediaPath($result['file']);
113+
$storage = $this->storageProvider->get('media');
114+
$content = $mediaDirectory->readFile($origFile);
115+
$storage->put($origFile, $content);
116+
101117
$this->_eventManager->dispatch(
102118
'catalog_product_gallery_upload_image_after',
103119
['result' => $result, 'action' => $this]

app/code/Magento/Catalog/Helper/Image.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,9 @@ public function save()
570570
* Return resized product image information
571571
*
572572
* @return array
573+
* @deprecated Magento is not responsible for image resizing anymore. This method works with local filesystem only.
574+
* Service that provides resized images should guarantee that the image sizes correspond to requested ones.
575+
* Use `getWidth()` and `getHeight()` instead.
573576
*/
574577
public function getResizedImageInfo()
575578
{

app/code/Magento/Catalog/Model/ImageUploader.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Catalog\Model;
77

88
use Magento\Framework\File\Uploader;
9+
use Magento\Framework\Storage\StorageProvider;
910

1011
/**
1112
* Catalog image uploader
@@ -73,6 +74,11 @@ class ImageUploader
7374
*/
7475
private $allowedMimeTypes;
7576

77+
/**
78+
* @var StorageProvider
79+
*/
80+
private $storageProvider;
81+
7682
/**
7783
* ImageUploader constructor
7884
*
@@ -84,6 +90,7 @@ class ImageUploader
8490
* @param string $baseTmpPath
8591
* @param string $basePath
8692
* @param string[] $allowedExtensions
93+
* @param StorageProvider $storageProvider
8794
* @param string[] $allowedMimeTypes
8895
*/
8996
public function __construct(
@@ -95,6 +102,7 @@ public function __construct(
95102
$baseTmpPath,
96103
$basePath,
97104
$allowedExtensions,
105+
StorageProvider $storageProvider,
98106
$allowedMimeTypes = []
99107
) {
100108
$this->coreFileStorageDatabase = $coreFileStorageDatabase;
@@ -106,6 +114,7 @@ public function __construct(
106114
$this->basePath = $basePath;
107115
$this->allowedExtensions = $allowedExtensions;
108116
$this->allowedMimeTypes = $allowedMimeTypes;
117+
$this->storageProvider = $storageProvider;
109118
}
110119

111120
/**
@@ -220,6 +229,11 @@ public function moveFileFromTmp($imageName, $returnRelativePath = false)
220229
$baseTmpImagePath,
221230
$baseImagePath
222231
);
232+
233+
$storage = $this->storageProvider->get('media');
234+
$content = $this->mediaDirectory->readFile($baseImagePath);
235+
$storage->put($baseImagePath, $content);
236+
223237
} catch (\Exception $e) {
224238
throw new \Magento\Framework\Exception\LocalizedException(
225239
__('Something went wrong while saving the file(s).')

app/code/Magento/Catalog/Model/Product.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1539,7 +1539,11 @@ public function getMediaGalleryImages()
15391539
}
15401540
$image['url'] = $this->getMediaConfig()->getMediaUrl($image['file']);
15411541
$image['id'] = $image['value_id'];
1542+
1543+
// @deprecated 'path' should not be used
1544+
// The file can be absent in local filesystem if remote storage is used
15421545
$image['path'] = $directory->getAbsolutePath($this->getMediaConfig()->getMediaPath($image['file']));
1546+
15431547
$images->addItem(new \Magento\Framework\DataObject($image));
15441548
}
15451549
$this->setData('media_gallery_images', $images);

app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\Framework\App\Filesystem\DirectoryList;
1212
use Magento\Framework\App\ObjectManager;
1313
use Magento\Framework\EntityManager\Operation\ExtensionInterface;
14+
use Magento\Framework\Storage\StorageProvider;
1415
use Magento\MediaStorage\Model\File\Uploader as FileUploader;
1516
use Magento\Store\Model\StoreManagerInterface;
1617

@@ -88,6 +89,10 @@ class CreateHandler implements ExtensionInterface
8889
* @var \Magento\Store\Model\StoreManagerInterface
8990
*/
9091
private $storeManager;
92+
/**
93+
* @var StorageProvider
94+
*/
95+
private $storageProvider;
9196

9297
/**
9398
* @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
@@ -98,6 +103,7 @@ class CreateHandler implements ExtensionInterface
98103
* @param \Magento\Framework\Filesystem $filesystem
99104
* @param \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb
100105
* @param \Magento\Store\Model\StoreManagerInterface|null $storeManager
106+
* @param StorageProvider $storageProvider
101107
* @throws \Magento\Framework\Exception\FileSystemException
102108
*/
103109
public function __construct(
@@ -108,7 +114,8 @@ public function __construct(
108114
\Magento\Catalog\Model\Product\Media\Config $mediaConfig,
109115
\Magento\Framework\Filesystem $filesystem,
110116
\Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb,
111-
\Magento\Store\Model\StoreManagerInterface $storeManager = null
117+
\Magento\Store\Model\StoreManagerInterface $storeManager = null,
118+
StorageProvider $storageProvider = null
112119
) {
113120
$this->metadata = $metadataPool->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class);
114121
$this->attributeRepository = $attributeRepository;
@@ -118,6 +125,7 @@ public function __construct(
118125
$this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
119126
$this->fileStorageDb = $fileStorageDb;
120127
$this->storeManager = $storeManager ?: ObjectManager::getInstance()->get(StoreManagerInterface::class);
128+
$this->storageProvider = $storageProvider ?: ObjectManager::getInstance()->get(StorageProvider::class);
121129
}
122130

123131
/**
@@ -366,20 +374,20 @@ protected function moveImageFromTmp($file)
366374
$file = $this->getFilenameFromTmp($this->getSafeFilename($file));
367375
$destinationFile = $this->getUniqueFileName($file);
368376

369-
if ($this->fileStorageDb->checkDbUsage()) {
370-
$this->fileStorageDb->renameFile(
371-
$this->mediaConfig->getTmpMediaShortUrl($file),
372-
$this->mediaConfig->getMediaShortUrl($destinationFile)
373-
);
377+
$tmpMediaPath = $this->mediaConfig->getTmpMediaPath($file);
378+
$mediaPath = $this->mediaConfig->getMediaPath($destinationFile);
379+
$this->mediaDirectory->renameFile(
380+
$tmpMediaPath,
381+
$mediaPath
382+
);
383+
$this->fileStorageDb->renameFile(
384+
$this->mediaConfig->getTmpMediaShortUrl($file),
385+
$this->mediaConfig->getMediaShortUrl($destinationFile)
386+
);
374387

375-
$this->mediaDirectory->delete($this->mediaConfig->getTmpMediaPath($file));
376-
$this->mediaDirectory->delete($this->mediaConfig->getMediaPath($destinationFile));
377-
} else {
378-
$this->mediaDirectory->renameFile(
379-
$this->mediaConfig->getTmpMediaPath($file),
380-
$this->mediaConfig->getMediaPath($destinationFile)
381-
);
382-
}
388+
$storage = $this->storageProvider->get('media');
389+
$content = $this->mediaDirectory->readFile($mediaPath);
390+
$storage->put($mediaPath, $content);
383391

384392
return str_replace('\\', '/', $destinationFile);
385393
}

0 commit comments

Comments
 (0)