自定义Joomla组件的文件上载表单

时间:2013-03-27 07:04:59

标签: file file-upload joomla joomla2.5

我的表单中有一个类型为file的字段。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎没有工作。另外,如何将文件名添加到数据库?它是在模型中完成的吗?谢谢!

控制器/ customcom.php

jimport('joomla.filesystem.file');     
class CustomComControllerCustomCom extends JControllerForm
        {
            function save()
            {
                $file = JRequest::getVar('img_url', null, 'files', 'array');

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

                echo $filename;
                }
        }

模型/形式/ customcom.xml

    <?xml version="1.0" encoding="utf-8"?>
    <form enctype="multipart/form-data">
            <fieldset>
                  <field
                        name="img_url"
                        type="file"
                        label="Image upload"
                        description=""
                        size="40"
                        class="inputbox"
                        default=""
                />
            </fieldset>
   </form>

2 个答案:

答案 0 :(得分:7)

刚想通了。

正确的方法是

$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$file = $files['img_url'];

这应该可以解决问题。 然后$ file数组包含以下键:

  • 错误
  • 名称
  • 尺寸
  • tmp_name的值

我删除了原来的答案,因为它有误导性。

答案 1 :(得分:3)

获得媒体经理的启发:

请注意,此组件已经很老了(重构正在准备中)

// Import dependencies
jimport('joomla.filesystem.file')

// Get input
$input = JFactory::getApplication()->input;

// Get uploaded file info
$file_info = $input->files->get('img_url', null);

// This will hold error
$error = null;

// Check if there was upload at all, mime is correct, file size, XSS, whatever...
if (!MycomponentHelper::canUpload($file_info, $error)
{
    $this->setError('problem: ' . $error);
    return false;
}

// Move uploaded file destination
JFile::upload($file_info['tmp_name'], $destination);