【问题标题】:Basic image upload in Joomla custom componentJoomla 自定义组件中的基本图片上传
【发布时间】:2013-10-17 16:32:47
【问题描述】:

我正在尝试将图像上传功能添加到我正在创建模型的视图中。我在这里尝试了许多示例代码,但我无法获得文件的完整路径。我的代码如下所示:

public function submit() {
    jimport ( 'joomla.filesystem.file' );
    // Check for request forgeries.
    JRequest::checkToken () or jexit ( JText::_ ( 'JINVALID_TOKEN' ) );

    // Initialise variables.
    $app = JFactory::getApplication ();
    $model = $this->getModel ( 'createaction' );

    // Get the data from the form POST
    $data = JRequest::getVar ( 'jform', array (), 'post', 'array' );

    echo $data['image'];   <-- here

    $createdItem = $model->createItem ( $data );
    if ($createdItem) {
        $redirect = JRoute::_ ( 'index.php?option=com_akcehned&view=actions', false );
        $this->setRedirect ( $redirect, "Akce byla vytvořena" );
    } else {
        echo "<h2>Omlouváme se, ale něco se stalo špatně</h2>";
    }

    return true;
}

xml中的部分文件输入:

    <field 
        name="image" 
        type="file" 
        description="COM_AKCEHNED_FORM_DESC_CREATEACTION_IMAGE" 
        label="COM_AKCEHNED_FORM_LBL_CREATEACTION_IMAGE" 
        size="10" 
        accept="image/*" />

在我尝试回显文件文件输入的地方,我得到的只是名称(image_name.jpg 等),但我需要完整路径,对吗?我看到了 ['tmp_name'] 的例子,但它对我不起作用。 我试过这样的代码:

$jinput = $app->input;
$files = $jinput->files->get('jform');
$file = $files['image'];
echo $file;
echo $file['tmp_name'];

但这对我也不起作用。我只是得到空值。有人可以给我工作代码块,让我从其他输入和完整路径获取数据以供上传吗?它适用于 joomla 2.5,谢谢

【问题讨论】:

  • 你能提供 var_dump($_FILES) 吗?
  • 当我对它调用 echo 时,我得到 "array(0) { }" 但我选择了文件。

标签: php image joomla joomla2.5


【解决方案1】:

如果您要上传文件,您需要确保表单标签包含 enctype 属性并且设置为“multipart/form-data”。

例如

<form action="" method="post" enctype="multipart/form-data">

另见:What does enctype='multipart/form-data' mean?

【讨论】:

  • 我太笨了。我的视图中有标签 enctype,但我将它添加到文件的输入中。现在,当我将它添加到表单标签时,它会好很多,而且我得到了正确的结果。谢谢
【解决方案2】:

您是否尝试过DPAttachments,只需三行代码即可将附件支持集成到您的组件中。

if (JLoader::import('components.com_dpattachments.libraries.dpattachments.core', JPATH_ADMINISTRATOR)) {
    echo DPAttachmentsCore::render('com_demo.item', $object->id);
}

支持从剪贴板拖放和复制粘贴(无需将文件保存到硬盘)。也许你想试一试。如果没有,这里是 Github repo 的链接,上传功能是如何实现的: https://github.com/Digital-Peak/DPAttachments/blob/master/com_dpattachments/admin/models/attachment.php#L50

[我是这个组件的作者]

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 2013-03-17
    • 2015-08-22
    • 2016-06-02
    • 2013-07-25
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多