I have tried to use Plupload integration in my custom module but I couldnt upload file in _submit hook. Is there any example how can I upload images after form submitted.

Best Regards,


slashrsm’s picture

Files will be uploaded to a temporary location before _submit gets invoked. You should get them in $form_state when execution hits submit function and it is up to you what to do with them.

Sorry for a late reply. Hope it helps.

Romi’s picture

I have tried to create a node and attach a file using plupload. Please guide me in this regard. In $form_state I am getting following array:

[pud] => Array
                    [0] => Array
                            [tmppath] => temporary://p17es0eqti1sud9jk1k4aj41ja74.tmp
                            [tmpname] => p17es0eqti1sud9jk1k4aj41ja74.tmp
                            [name] => dummy123.pdf
                            [status] => done


MaudeH’s picture

Hi "Drupalers" and an happy new year !

I've the same problem : what are we doing with this ?
file_save_upload, file_copy, file_move don't save the images (or files) in the public directory...

Thanks for your answers.

MaudeH’s picture

@Romi : just in case you need some help...

function waip_gallery_create_form_submit($form, &$form_state) {
$values = $form_state['values'];
// Prepare the new node
$node = new stdClass();
$node->type = 'machine_name'; // The machine name of your content-type
$node->uid = 0; // The user ID who create the node (0: anomymous | 1: admin)
$node->created = strtotime('now');
$node->changed = strtotime('now');
$node->status = 0; // Is the node published or not ?
$node->comment = 0;
$node->promote = 0;
$node->moderate = 0;
$node->sticky = 0;
$node->language = 'und';


// Add some datas to $node
$node->title = 'The new node title'; // The title
$node->field_custom_field1[$node->language][0] = array(
// A custom field in relation with your form
'value' => $values['field1'],
'format' => NULL,
'safe_value' => $values['field1']

// Prepare the file to upload
$filepath = 'public://path/to/your/folder';
file_prepare_directory($filepath, FILE_CREATE_DIRECTORY); // Create the folder if it doesn't exist

$files_count = count($values['pud']);
    for (
$i = 0; $i < $files_count; $i++) { // For all your files to upload (i use 'pud' from your code above)
$path = $values['pud'][$i]['tmppath']; // eg: temporary://p17es0eqti1sud9jk1k4aj41ja74.tmp
$name = $values['pud'][$i]['name']; // eg: dummy123.pdf
        // Set the $file as an object to pass it in the file_copy() function
$file = (object)array(
'uid' => 0,
'uri' => $path,
'filemime' => file_get_mimetype($path),
'status' => 1
// Copy the file using the name attribute, eg: public://path/to/your/folder/dummy123.pdf
if ($file = file_copy($file, $filepath . '/' . $name)) {
        else {
drupal_set_message('Error', 'error');
// Attach the file as an array to the new node
$node->field_album_photos[$node->language][$i] = (array)$file;
// Save the node
// Check if the node is successfully created
if ($node->nid) {
drupal_set_message('Node creation: ok');
    else {
drupal_set_message('Node creation: error', 'error');
slashrsm’s picture

Status:Closed (fixed)» Active

The easiest way is to use file_save_upload().

My comment above is not entirely true. Better solution would be file_unmanaged_move(), file_uri_to_object() (part of file_entity but also implemented in plupload.module, so you don't need to install any dependencies) and/or file_move().

slashrsm’s picture

Status:Active» Fixed

Status:Fixed» Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

Status:Active» Closed (fixed)