如何在magento 2中添加自定义文件上载功能

如何在magento 2中添加自定义文件上载功能,magento,magento2,magento-2.0,magento2.0.2,Magento,Magento2,Magento 2.0,Magento2.0.2,我通过Magento 2类别选项卡中的自定义模块创建了文件上载功能。我不知道如何将文件保存到数据库中。请任何人告诉我如何执行此操作?您没有将文件保存到数据库中,只有名称: public function __construct( .... \Magento\Framework\File\UploaderFactory $uploaderFactory, ... ) { ...... $this->uploaderFactory = $uplo

我通过Magento 2类别选项卡中的自定义模块创建了文件上载功能。我不知道如何将文件保存到数据库中。请任何人告诉我如何执行此操作?

您没有将文件保存到数据库中,只有名称:

    public function __construct(
    ....
    \Magento\Framework\File\UploaderFactory $uploaderFactory,
    ...
) {
    ......
    $this->uploaderFactory = $uploaderFactory;
    .....
}

public function uploadFileAndGetName($input, $destinationFolder)
{
    try {

            $uploader = $this->uploaderFactory->create(array('fileId' => $input));
            /** test The File with Callback here */
            $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
            $uploader->setAllowRenameFiles(true);
            $uploader->setFilesDispersion(true);
            $uploader->setAllowCreateFolders(true);
            $result = $uploader->save($destinationFolder);
            return $result['file'];

    } catch (\Exception $e) {             
        if ($e->getCode() != \Magento\Framework\File\Uploader::TMP_NAME_EMPTY) {
            throw new FrameworkException($e->getMessage());
        }
    }
    return '';
}

下面的代码是在自定义表中上载文件

namespace MODULE\NAMESPACE\Controller\Index;
use Magento\Framework\App\Filesystem\DirectoryList;
class NAMESPACE extends \Magento\Framework\App\Action\Action
{
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Customer\Model\Session $customerSession,
        \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
        \Magento\Framework\Message\ManagerInterface $messageManager
        ) {
        $this->_customerSession = $customerSession;
        $this->resultJsonFactory = $resultJsonFactory;
        $this->messageManager = $messageManager;
        parent::__construct($context);
    }
    public function execute()
    {
        $params =  $this->getRequest()->getParams();
        $result = $this->resultJsonFactory->create();
        $resultRedirect = $this->resultRedirectFactory->create();
        if ($params) {
            $data['name'] = $params['name'];
            $data['email_id'] = $params['email'];
            $data['city'] = isset($params['city'])? $params['city'] : '';
            $data['store_id'] = $params['storeid'];

            $model = $this->_objectManager->create('MODEL FILE PATH of specific table');
            try{
                $uploader = $this->_objectManager->create(
                    'Magento\MediaStorage\Model\File\Uploader',
                    ['fileId' => 'FIELDNAME']
                );
                $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
                /** @var \Magento\Framework\Image\Adapter\AdapterInterface $imageAdapter */
                $imageAdapter = $this->_objectManager->get('Magento\Framework\Image\AdapterFactory')->create();
                $uploader->setAllowRenameFiles(true);
                $uploader->setFilesDispersion(true);
                /** @var \Magento\Framework\Filesystem\Directory\Read $mediaDirectory */
                $mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')
                    ->getDirectoryRead(DirectoryList::MEDIA);
                $result = $uploader->save($mediaDirectory->getAbsolutePath('FOLDERNAME'));
                    if($result['error']==0)
                    {
                        $data['offline_bill'] = 'FOLDERNAME' . $result['file'];
                    }
            } catch (\Exception $e) {

            }
            $model->setData($data);            
            try
            {
                $model->save();
                $this->messageManager->addSuccess(__('The form submitted successfully.'));
            }
            catch (\Magento\Framework\Exception\LocalizedException $e) 
            {
                $this->messageManager->addError($e->getMessage());
            }
            return $resultRedirect->setPath(REDIRECT PATH);
        }
    }
}

嗨,朋友,谢谢你的回答。但是我有点困惑,我在这里通过InstallData.php在category选项卡中添加字段,所以你能告诉我如何将文件名保存在table中吗嗨,我有自定义表单网格。我在“media/unicorn/channel/images/img.png”中上载了文件,但当我编辑表单时,图像预览正在中断,因为路径是get“media/image.png”。如何在magento 2自定义网格表单中附加文件夹路径。提前谢谢你的帮助。
namespace MODULE\NAMESPACE\Controller\Index;
use Magento\Framework\App\Filesystem\DirectoryList;
class NAMESPACE extends \Magento\Framework\App\Action\Action
{
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Customer\Model\Session $customerSession,
        \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
        \Magento\Framework\Message\ManagerInterface $messageManager
        ) {
        $this->_customerSession = $customerSession;
        $this->resultJsonFactory = $resultJsonFactory;
        $this->messageManager = $messageManager;
        parent::__construct($context);
    }
    public function execute()
    {
        $params =  $this->getRequest()->getParams();
        $result = $this->resultJsonFactory->create();
        $resultRedirect = $this->resultRedirectFactory->create();
        if ($params) {
            $data['name'] = $params['name'];
            $data['email_id'] = $params['email'];
            $data['city'] = isset($params['city'])? $params['city'] : '';
            $data['store_id'] = $params['storeid'];

            $model = $this->_objectManager->create('MODEL FILE PATH of specific table');
            try{
                $uploader = $this->_objectManager->create(
                    'Magento\MediaStorage\Model\File\Uploader',
                    ['fileId' => 'FIELDNAME']
                );
                $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
                /** @var \Magento\Framework\Image\Adapter\AdapterInterface $imageAdapter */
                $imageAdapter = $this->_objectManager->get('Magento\Framework\Image\AdapterFactory')->create();
                $uploader->setAllowRenameFiles(true);
                $uploader->setFilesDispersion(true);
                /** @var \Magento\Framework\Filesystem\Directory\Read $mediaDirectory */
                $mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')
                    ->getDirectoryRead(DirectoryList::MEDIA);
                $result = $uploader->save($mediaDirectory->getAbsolutePath('FOLDERNAME'));
                    if($result['error']==0)
                    {
                        $data['offline_bill'] = 'FOLDERNAME' . $result['file'];
                    }
            } catch (\Exception $e) {

            }
            $model->setData($data);            
            try
            {
                $model->save();
                $this->messageManager->addSuccess(__('The form submitted successfully.'));
            }
            catch (\Magento\Framework\Exception\LocalizedException $e) 
            {
                $this->messageManager->addError($e->getMessage());
            }
            return $resultRedirect->setPath(REDIRECT PATH);
        }
    }
}