Hành động tải tập tin Magento2


11

Có phương pháp tiện ích magento nào có sẵn có thể giúp tôi tạo hành động tải xuống nội dung bắt buộc không?


1
Loại / phần mở rộng của tập tin bạn cần tải xuống mạnh mẽ?
Fayyaz Khattak

Câu trả lời:


19

bạn có thể tạo hành động điều khiển của mình bằng cách mở rộng \Magento\Backend\App\Actioncho phụ trợ hoặc \Magento\Framework\App\Action\Actioncho lối vào.
và làm cho nó trông như thế này:

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

Làm thế nào để truyền nội dung trong null, tôi có mảng dữ liệu khi passin sử dụng phương thức trên xác định lỗi loại và hàm.
Rakesh Jesadiya

3
Bạn có thể trực tiếp trả về kết quả $this->fileFactory->create()vì đây đã là một triển khai phản hồi, không cần$resultRaw
Fabian Schmengler

@fschmengler có lẽ bạn đúng, nhưng tôi lấy ví dụ này từ lõi từ hành động tải xuống sao lưu.
Marius

1
Hầu hết các mô-đun lõi M2 là một ví dụ tồi;)
Fabian Schmengler

Vâng vâng tôi biết các cuộc thảo luận. Tôi thực sự nghĩ rằng tôi đã bắt đầu một phần của nó. Nhưng điều này không phải lúc nào cũng đúng
Marius

8

Ngoài ra, người ta có thể cung cấp đường dẫn đến tệp bạn muốn tải xuống:

//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

Dựa trên câu trả lời mà Marius đã đưa ra.

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

Không có quyền chính xác (ngay cả khi cần đọc ở đây, Magento kiểm tra quyền ghi) sẽ dẫn đến một lỗi lạ. "Trang web bị sập hoặc di chuyển" hoặc smth như thế.

Thật đáng để lấy một đỉnh cao lén lút ở logic bên trong $ fileFactory-> create ().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.