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;
    }
}

शून्य में सामग्री कैसे पारित करें, मेरे पास डेटा है जब पासिन विधि के उपयोग से इसकी परिभाषित प्रकार और फ़ंक्शन त्रुटि।
राकेश जेसादिया

3
आप सीधे परिणाम वापस कर सकते हैं $this->fileFactory->create()क्योंकि यह पहले से ही एक प्रतिक्रिया कार्यान्वयन है, इसके लिए कोई ज़रूरत नहीं है$resultRaw
फेबियन शेंगलर

@fschmengler आप शायद सही हैं, लेकिन मैंने इस उदाहरण को बैकअप डाउनलोड एक्शन से कोर से लिया है।
Marius

1
अधिकांश एम 2 कोर मॉड्यूल एक बुरा उदाहरण हैं;)
फैबियन शेंगलर

हां हां मैं चर्चा को जानता हूं। मुझे वास्तव में लगता है कि मैंने इसका हिस्सा शुरू किया। लेकिन यह हमेशा सच नहीं है
मेरियस

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;
    }
}

सही अनुमति नहीं होने (भले ही पढ़ने की आवश्यकता हो यहां मैगेंटो चेक लिखने की अनुमति) एक अजीब त्रुटि का परिणाम होगा। "साइट नीचे है या स्थानांतरित हो गई है" या इस तरह से एसएमएस करें।

यह $ fileFactory-> create () के अंदर तर्क पर एक चरम शिखर लेने के लायक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.