| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-downloadable/Model/File/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-downloadable/Model/File/ContentUploader.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Downloadable\Model\File;
use Magento\MediaStorage\Helper\File\Storage;
use Magento\MediaStorage\Helper\File\Storage\Database;
use Magento\MediaStorage\Model\File\Uploader;
use Magento\MediaStorage\Model\File\Validator\NotProtectedExtension;
use Magento\Downloadable\Api\Data\File\ContentInterface;
use Magento\Downloadable\Model\Link as LinkConfig;
use Magento\Downloadable\Model\Sample as SampleConfig;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Filesystem;
class ContentUploader extends Uploader implements \Magento\Downloadable\Api\Data\File\ContentUploaderInterface
{
/**
* Default MIME type
*/
const DEFAULT_MIME_TYPE = 'application/octet-stream';
/**
* Filename prefix for temporary files
*
* @var string
*/
protected $filePrefix = 'magento_api';
/**
* @var \Magento\Framework\Filesystem\Directory\WriteInterface
*/
protected $mediaDirectory;
/**
* @var \Magento\Framework\Filesystem\Directory\WriteInterface
*/
protected $systemTmpDirectory;
/**
* @var LinkConfig
*/
protected $linkConfig;
/**
* @var SampleConfig
*/
protected $sampleConfig;
/**
* @param Database $coreFileStorageDb
* @param Storage $coreFileStorage
* @param NotProtectedExtension $validator
* @param Filesystem $filesystem
* @param LinkConfig $linkConfig
* @param SampleConfig $sampleConfig
*/
public function __construct(
Database $coreFileStorageDb,
Storage $coreFileStorage,
NotProtectedExtension $validator,
Filesystem $filesystem,
LinkConfig $linkConfig,
SampleConfig $sampleConfig
) {
$this->_validator = $validator;
$this->_coreFileStorage = $coreFileStorage;
$this->_coreFileStorageDb = $coreFileStorageDb;
$this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
$this->systemTmpDirectory = $filesystem->getDirectoryWrite(DirectoryList::SYS_TMP);
$this->linkConfig = $linkConfig;
$this->sampleConfig = $sampleConfig;
}
/**
* Decode base64 encoded content and save it in system tmp folder
*
* @param ContentInterface $fileContent
* @return array
*/
protected function decodeContent(ContentInterface $fileContent)
{
$tmpFileName = $this->getTmpFileName();
$fileSize = $this->systemTmpDirectory->writeFile($tmpFileName, base64_decode($fileContent->getFileData()));
return [
'name' => $fileContent->getName(),
'type' => self::DEFAULT_MIME_TYPE,
'tmp_name' => $this->systemTmpDirectory->getAbsolutePath($tmpFileName),
'error' => 0,
'size' => $fileSize,
];
}
/**
* Generate temporary file name
*
* @return string
*/
protected function getTmpFileName()
{
return uniqid($this->filePrefix, true);
}
/**
* {@inheritdoc}
*/
public function upload(ContentInterface $fileContent, $contentType)
{
$this->_file = $this->decodeContent($fileContent);
if (!file_exists($this->_file['tmp_name'])) {
throw new \InvalidArgumentException('There was an error during file content upload.');
}
$this->_fileExists = true;
$this->_uploadType = self::SINGLE_STYLE;
$this->setAllowRenameFiles(true);
$this->setFilesDispersion(true);
$result = $this->save($this->getDestinationDirectory($contentType));
unset($result['path']);
$result['status'] = 'new';
$result['name'] = substr($result['file'], strrpos($result['file'], '/') + 1);
return $result;
}
/**
* Retrieve destination directory for given content type
*
* @param string $contentType
* @return string
* @throws \InvalidArgumentException
*/
protected function getDestinationDirectory($contentType)
{
switch ($contentType) {
case 'link_file':
$directory = $this->mediaDirectory->getAbsolutePath($this->linkConfig->getBaseTmpPath());
break;
case 'link_sample_file':
$directory = $this->mediaDirectory->getAbsolutePath($this->linkConfig->getBaseSampleTmpPath());
break;
case 'sample':
$directory = $this->mediaDirectory->getAbsolutePath($this->sampleConfig->getBaseTmpPath());
break;
default:
throw new \InvalidArgumentException('Invalid downloadable file content type.');
}
return $directory;
}
}