File upload form for custom Joomla component

Moo33 picture Moo33 · Mar 27, 2013 · Viewed 10.8k times · Source

I have a field in my form which is of type file. When the user clicks on the save icon, I want to naturally upload the file to the server and save the filename in the database. I tried testing this out by echoing the filename but it doesn't seem to be working. Also, how do I add the filename to the database? Is it done in the model? Thanks!

controllers/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;
                }
        }

models/forms/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>

Answer

Bakual picture Bakual · Mar 28, 2013

Just figured it out.

The correct way is

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

That should do the trick. The $file array then holds the following keys:

  • error
  • name
  • size
  • tmp_name
  • type

I've deleted my original answer as it was misleading.