【问题标题】:Magento admin File Upload not saving the file and pathMagento admin文件上传不保存文件和路径
【发布时间】:2015-11-26 09:56:58
【问题描述】:

只是我对 magento 管理网格研究的继续。我正在尝试创建文件上传。保存过程已完成,没有错误,并且在数据库中添加了一个表格行。

问题:

文件路径未保存在数据库中。

没有创建目录路径,当然也没有文件上传到服务器。

注意:该过程在网格和数据库中添加了额外的表格行。

我只是参考这个链接Magento image upload form field

问题:

  1. 如何为我上传的文件创建目录文件夹?

  2. 如何在数据库表中保存路径?

  3. config.xml中有代码要加吗?

更新

终于解决了文件上传问题。 感谢@PHP Weblineindia 指导我。 这是我更新的控制器。

public function saveAction() {
    $post_data=$this->getRequest()->getPost();

    if ($post_data) {
        try {                
     //save file to the destination folder   
            if (isset($_FILES)){
                if ($_FILES['file_path']['name']) {

                    $path = Mage::getBaseDir('media') . DS . 'rts' . DS .'pmadmin'.DS;
                    $uploader = new Varien_File_Uploader('file_path');
                    $uploader->setAllowedExtensions(array('PDF','pdf'));
                    $uploader->setAllowRenameFiles(false);
                    $uploader->setFilesDispersion(false);
                    $destFile = $path.$_FILES['file_path']['name'];
                    $filename = $uploader->getNewFileName($destFile);
                    $uploader->save($path, $filename);

                    $post_data['file_path']='rts/pmadmin/'.$filename;
                }
            }
    //save file path to the database
            $model = Mage::getModel("pmadmin/pmadmin")
            ->addData($post_data)
            ->setId($this->getRequest()->getParam("id"))
            ->save();

            Mage::getSingleton("adminhtml/session")->addSuccess(Mage::helper("adminhtml")->__("File was successfully saved"));
            Mage::getSingleton("adminhtml/session")->setPmadminData(false);

            if ($this->getRequest()->getParam("back")) {
                $this->_redirect("*/*/edit", array("id" => $model->getId()));
                return;
            }
            $this->_redirect("*/*/");
            return;
        } 
        catch (Exception $e) {
            Mage::getSingleton("adminhtml/session")->addError($e->getMessage());
            Mage::getSingleton("adminhtml/session")->setPmadminData($this->getRequest()->getPost());
            $this->_redirect("*/*/edit", array("id" => $this->getRequest()->getParam("id")));
        return;
        }

    }
    $this->_redirect("*/*/");
}

这是我的表格。

protected function _prepareForm() {

    $form = new Varien_Data_Form(array(
        'id' => 'edit_form',
        'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
        'method' => 'post',
        'enctype' => 'multipart/form-data'
            )
    );

    $form->setUseContainer(true);
    $this->setForm($form);
    return parent::_prepareForm();
}

路径保存在表的file_path列,文件上传到media/pmadmin目录。

谢谢!

【问题讨论】:

    标签: php mysql magento


    【解决方案1】:

    @Rodge 您正在尝试使用以下发布数据获取文件数据

    $postData = $this->getRequest()->getPost();
    $postData['pmadmin_file'];
    

    并且您想上传文件类型,因此文件类型不是帖子的一部分。

    尝试如下获取文件数据。

    $file_name=$_FILES['pmadmin_file']['name'];
    

    并测试您是否在 saveAction() 方法中获取文件名,之后您就可以存储文件数据。在目录中。

    在您的控制器文件中,您可以保存数据,例如

    如果(isset($imgFilename))

        $newsModel->setImage($imgFilename);
    
                    $newsModel->setId($this->getRequest()->getParam('id'))
                        ->setTitle($postData['title'])
                        ->setShort_description($postData['short_description'])
                        ->setCustomer_group_id($postData['customer_group_id'])
                        ->setIs_active($postData['is_active'])
                        ->setValue($postData['value'])
                    ->save(); 
    

    尝试保存数据,如

    if(isset($imgFilename)) {

            $newsModel->setId($this->getRequest()->getParam('id'))
                ->setTitle($postData['title'])
                ->setFilePath($imgFilename)
                ->setShortDescription($postData['short_description'])
                ->setCustomerGroupId($postData['customer_group_id'])
                ->setIsActive($postData['is_active'])
                ->setValue($postData['value'])
                ->save(); 
    

    }

    【讨论】:

    • 再次感谢@PHP Weblineindia,我对您的回答有点困惑。所以你的意思是我会改变 $postData['pmadmin_file'];进入 $file_name=$_FILES['pmadmin_file']['name'];?或者我把代码 $file_name=$_FILES['pmadmin_file']['name']; 放在哪里?
    • 我的意思是说,您尝试获取 $postData['pmadmin_file'] 之类的文件名的地方将其替换为 $_FILES['pmadmin_file']['name'];在控制器的 saveAction() 方法中,然后尝试 :)
    • @rodge 现在打印文件名检查是否显示:) 我认为你的保存数据有错误。所以为此我会提出新的答案,这样你就可以轻松理解和想象那件事。
    • 你能告诉我你的数据库中的字段名称是什么
    • 我不擅长调试但我 var_dump($file_name);在错误页面显示错误日志之前我得到了 null 。 "无法发送标头;标头已在 " 中发送
    猜你喜欢
    • 2018-02-22
    • 2010-12-31
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多