Czy dostępna jest metoda narzędzia Magento, która może mi pomóc w utworzeniu akcji pobierania zawartości wymuszonej?
Czy dostępna jest metoda narzędzia Magento, która może mi pomóc w utworzeniu akcji pobierania zawartości wymuszonej?
Odpowiedzi:
możesz utworzyć akcję kontrolera, rozszerzając \Magento\Backend\App\Action
dla backendu lub \Magento\Framework\App\Action\Action
frontendu.
i spraw, aby wyglądało to tak:
<?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;
}
}
$this->fileFactory->create()
ponieważ jest to już implementacja odpowiedzi, nie ma potrzeby$resultRaw
Można również podać ścieżkę do pliku, który chcesz pobrać:
//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
);
Na podstawie odpowiedzi udzielonej przez Mariusza.
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;
}
}
Nieprawidłowe uprawnienia (chociaż tutaj potrzebny jest odczyt, Magento sprawdza uprawnienia do zapisu), spowoduje dziwny błąd. „Witryna jest wyłączona lub przeniesiona” lub coś w tym rodzaju.
Warto również zajrzeć do logiki wewnątrz $ fileFactory-> create ().