试图通过Joomla管理员组件字段上传图像,但没有发生


Trying to Upload Image through Joomla Administrator Component Field, but not happening

我正试图通过Joomla管理员组件上传图像

在administrator''components''com_toys''models''forms''variant.xml中,我定义了

<?xml version="1.0" encoding="utf-8"?>
<form enctype="multipart/form-data">
<fieldset>
<field name="id" type="text" readonly="true" class="readonly" default="0" description="JGLOBAL_FIELD_ID_DESC"/>
<field name="v_prod_id" type="sql" label="Select Brand"/>   
<field name="v_name" type="text" label="Select Model"/>
<field name="v_descr" type="editor" buttons="true" filter="safehtml" label="Toy Details"/>
<field name="v_price" type="text" label="Price"/>   
<field name="v_small_img" type="file" label="Select Image"/>
<field name="state" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" class="inputbox" size="1" default="0">
  <option value="1">JPUBLISHED</option>
  <option value="0">JUNPUBLISHED</option>
  <option value="2">JARCHIVED</option>
  <option value="-2">JTRASHED</option>
</field>

在控制器administrator''components''comm_toys''controllers''variant.php中,我试图检索下面的文件

但该文件既没有上传,也没有保存在目录-/images/uploads/variats/中,也没有存储在数据库中

有人能帮忙吗?请问出了什么问题,为什么文件没有保存

更新这很容易,因为我不知道Joomla通过声明字段类型"/>

内置了解决方案

您使用了错误的表单名称

$files = $jinput->files->get('jform');

它不是jform,而是v_small_img

所以使用这个

    $input = new JInput;
    $file = $input->get('v_small_img', '', 'post'); 

当你有$file时,也不要再使用$_FILES。使用此替代

$file['tmp_name']; JFile::makeSafe($file['name']);

无论您在哪里使用过$_FILES。

更新了完整的代码更改

public function save($key = null, $urlVar = null)
{
    $input = new JInput;
    $file = $input->get('v_small_img', '', 'post');
    //$file = $files['image'];
    $db = JFactory::getDBO();
    //$post   = JRequest::get( 'post' );
    $FILE_PATH= JPATH_BASE ."/images/uploads/variants/";
    //$StrFiles="";
    if((file_exists($file['tmp_name']))){
        if($file['name']!=""){
            $dt = time()."s";
            if(!JFile::upload($file['tmp_name'],$FILE_PATH.JFile::makeSafe($dt."_".$file['name']))){
                return JError::raiseWarning( 500, "Unable To upload File ".$file['name']);
            }else{
               // $StrFiles .=JFile::makeSafe($dt."_".$file['name']);
            }
        } else {
        return JError::raiseWarning( 500, "File name cannot be empty.");
    }
    }
    /*if($StrFiles){
        $post['v_small_img']= $StrFiles;
    }*/
}

更新这很容易,因为我不知道Joomla通过声明字段内置了解决方案型

<field name="v_small_img" type="media" directory="<upload path>" />

通过选择该图像可以很容易地加载到所需的目录中同时-感谢Amit ray尝试