Дія завантаження файлів Magento2


11

Чи доступний метод утиліти magento, який може допомогти мені створити дію примусового завантаження вмісту?


1
тип / розширення файлів, які потрібно насильно завантажувати?
Файяз Хаттак

Відповіді:


19

ви можете створити дію контролера, розширивши його \Magento\Backend\App\Actionна бекенд або \Magento\Framework\App\Action\Actionна фронтенд.
і зробіть це таким чином:

<?php 
namespace Your\Namespace\Here;

class ClassName extends \Magento\Backend\App\Action 
{
    public function __construct(
        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
        \Magento\Backend\App\Action\Context $context
    ) {
        $this->resultRawFactory      = $resultRawFactory;
        $this->fileFactory           = $fileFactory;
        parent::__construct($context);
    }
    public function execute()
    {
        //do your custom stuff here
        $fileName = 'file name for download here';
        $this->fileFactory->create(
            $fileName,
            null, //content here. it can be null and set later 
            base dir of the file to download here
            'application/octet-stream', //content type here
            content lenght here...can be null
        );
        $resultRaw = $this->resultRawFactory->create();
        $resultRaw->setContents(contents of file here); //set content for download file here
        return $resultRaw;
    }
}

Як передавати вміст у null, у мене є масив даних, коли passin, використовуючи вищевказаний метод, визначає тип та помилку функції.
Ракеш Єсадія

3
Ви можете безпосередньо повернути результат, $this->fileFactory->create()оскільки це вже реалізація відповіді, не потрібно$resultRaw
Фабіан Шменглер

@fschmengler, напевно, ви праві, але я взяв цей приклад із ядра з дії резервного копіювання.
Маріус

1
Більшість основних модулів M2 - поганий приклад;)
Фабіан Шменглер

Так, я знаю дискусію. Насправді я думаю, що я почав це робити. Але це не завжди так
Маріус

8

Також можна надати шлях до файлу, який ви хочете завантажити:

//Send file for download
//@see Magento\Framework\App\Response\Http\FileFactory::create()
return $this->_fileFactory->create(
    //File name you would like to download it by
    $filename,
    [
        'type'  => "filename", //type has to be "filename"
        'value' => "folder/{$filename}", // path will append to the
                                         // base dir
        'rm'    => true, // add this only if you would like the file to be
                         // deleted after being downloaded from server
    ],
    \Magento\Framework\App\Filesystem\DirectoryList::MEDIA
);

2

Виходячи з відповіді, яку дав Маріус.

class Download extends \Magento\Framework\App\Action\Action
{
    protected $resultRawFactory;
    protected $fileFactory;

    public function __construct(
        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
        \Magento\Backend\App\Action\Context $context
    ) {
        $this->resultRawFactory      = $resultRawFactory;
        $this->fileFactory           = $fileFactory;
        parent::__construct($context);
    }
    public function execute()
    {
        try{
            $fileName = 'FileName'; // the name of the downloaded resource
            $this->fileFactory->create(
                $fileName,
                [
                    'type' => 'filename',
                    'value' => 'relative/path/to/file/from/basedir'
                ],
                DirectoryList::MEDIA , //basedir
                'application/octet-stream',
                '' // content length will be dynamically calculated
            );
        }catch (\Exception $exception){
            // Add your own failure logic here
            var_dump($exception->getMessage());
            exit;
        }
        $resultRaw = $this->resultRawFactory->create();
        return $resultRaw;
    }
}

Не маючи правильних дозволів (навіть якщо тут потрібне читання Magento перевіряє дозволи на запис), це призведе до дивної помилки. "Сайт вниз або переміщений" або щось подібне.

Варто взяти пік підкрадання за логікою всередині $ fileFactory-> create ().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.