【问题标题】:How to get file tmp_name using JInput如何使用 JInput 获取文件 tmp_name
【发布时间】:2013-03-18 11:54:28
【问题描述】:

我对此有点坚持。我有这段代码可以设法获取我的文件的文件名:

class AControllerA extends JControllerForm
{
    function save()
    {
        //Upload file
        jimport('joomla.filesystem.file');
        $jinput = JFactory::getApplication()->input;
        $store_form = $jinput->get('jform', null, 'array');
            $file = $store_form['img_url'];
        echo $file;
     }
}

*文件字段名称为jform[img_url];

但是我似乎无法获得文件的“tmp_name”。有人知道我错过了什么吗?我对 jinput 的工作方式有点困惑……jrequest 很容易工作。谢谢!

模型/表单/a.xml

<form enctype="multipart/form-data">
        <fieldset>
        <field
                        name="img_url"
                        type="file"
                        label=""
                        description=""
                        size="40"
                        class="inputbox"
                        default=""
                />
       </fieldset>
</form>

【问题讨论】:

  • 我怀疑 enctype 是否被复制到 HTML 表单中。您需要将其添加到布局文件中的表单标签中。

标签: file-upload joomla save joomla2.5 jinput


【解决方案1】:

这样怎么样:

$files = $input->files->get('jform', null);
$filename = $files['img_url']['tmp_name'];
echo $filename;

查看Retrieving file data using JInput 的文档

【讨论】:

  • 感谢您的回复。不幸的是,它仍然没有回应任何东西。上面已经包含了我的表单代码,不知道是不是因为表单的原因?
  • 我刚刚看到您从昨天开始重复发布此内容,您甚至没有回复昨天回复您的人,而只是再次发布,这很糟糕。无论如何,您可以尝试转储$files 的内容并查看其中包含的内容
  • 再次感谢您的回复。我确实回复了,但他们被删除了。另外,我想既然问题现在不同了,我就创建了一个新帖子。抱歉,只是有点压力,因为当我尝试了几乎所有方法时,它似乎不起作用。
  • 你试过这些变量的 var_dump() 吗?你的php版本低于5.3吗?
  • 我的 PHP 版本是 5.4.10,转储 $files 后,它显示为 NULL。如果它有任何区别,我会在我的 Mac 上运行 MAMP ......虽然我怀疑它是否有效:/ 这很奇怪,因为 '$jinput->get' 有效,而 '$jinput->files->get' 没有。
【解决方案2】:

假设您使用的是 JForm 和文件输入类型,那么您可以使用以下方式访问该文件:

$files = $jinput->files->get('jform');
$file = $files['img_url']['tmp_name']

还要确保您的表单设置了enctype="multipart/form-data",否则将无法正常工作。

【讨论】:

  • 我尝试回显 $files 和 $file 但似乎没有任何显示。 $jinput = JFactory::getApplication()->输入; $files = $jinput->files->get('jform', null);回声$文件; $filename = $files['img_url']['tmp_name'];回声$文件名;
  • Echo 可能无法工作,因为页面在保存后被重定向。因此,您永远看不到输出。在 echo 语句之后,您需要一个 die();。或者您可以使用 JDump (extensions.joomla.org/extensions/miscellaneous/development/1509) 之类的扩展来转储一些变量。
  • 感谢您的回答!当我注释掉重定向时,它的呼应很好。唯一的问题是我不能让 '$jinput->files->get' 工作而 '$jinput->get' 工作。有没有不使用 jinput 的解决方法?谢谢!
  • 我不这么认为,除非您使用已弃用的 JRequest。未设置 enctype="multipart/form-data" 时它对我不起作用,但是当我为表单设置此部分时它工作正常。此外,如果您将 JForm 与 File FormField 一起使用,则可以像答案中所示那样访问它。如果您在 JForm 类之外使用自己的输入字段,则可以使用字段名称直接访问它。你可以试试这个。
  • 非常感谢您的建议和回复。你摇滚。 :)
【解决方案3】:

在你的模型中你应该有这样的东西

 public function getForm($data = array(), $loadData = false)
    {
        /**
         * Get the Form
         */
        $form = $this->loadForm('com_mycomponent.mycomponent', 'mycomponent',
                                        array('control' => false, 'load_data' => $loadData));
        if (empty($form)) {
            return false;
        }
        return $form;
    }

注意 $loaddata 和 'control' 设置为 false,当 'control' 为 false 时,您可以根据 xml 中指定的名称获取文件参数,即输出形式如下:

<input name="name in xml file" type="file" />

如果'控制' => 'jform'

<input name="jform[name in xml file]" type="file" />

$loaddata= false 表示您不需要从数据库中获取任何数据到表单中。

在你的 view.html.php 中你应该有这样的东西

public function display($tpl = null)
    {
        $this->formData = $this->get('Form');
        $this->addToolbar();
        parent::display($tpl);
    }

假设我将在“mycomponent”控制器的“上传”方法中收到请求的文件,那么它应该是这样的:

class MycomponentControllerMycomponent extends JControllerAdmin
{
public function upload()
    {
        //Retrieve file details from uploaded file, sent from upload form
        $file = JFactory::getApplication()->input->files->get('name in xml 
        **$tmp_name** = $file['tmp_name'];

    }
}

$tmp_name 是您的必填名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多