4

I'm absolutely stuck on this... checked all related stackoverflow posts and nothing has helped. Using Phil's REST Server / Client setup in Codeigniter and can insert normal entries but cannot upload multiple images, actually even a single image.

I can't really work out how to debug the REST part, it just returns nothing.

I have this array coming in from the view:

Array
(
    [1] => Array
        (
            [name] => sideshows.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phppYycdA
            [error] => 0
            [size] => 967656
        )

    [2] => Array
        (
            [name] => the-beer-scale.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phpCsiunQ
            [error] => 0
            [size] => 742219
        )

    [3] => Array
        (
            [name] => the-little-lace.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phpXjT7WL
            [error] => 0
            [size] => 939963
        )

    [4] => Array
        (
            [name] => varrstoen-australia.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phpcHrJXe
            [error] => 0
            [size] => 2204400
        )

)

I am using this helper method I found to sort out multiple file uploads:

function multifile_array()
{
    if(count($_FILES) == 0)
        return;

    $files = array();
    $all_files = $_FILES['files']['name'];
    $i = 0;

    foreach ($all_files as $filename) {
        $files[++$i]['name'] = $filename;
        $files[$i]['type'] = current($_FILES['files']['type']);
        next($_FILES['files']['type']);
        $files[$i]['tmp_name'] = current($_FILES['files']['tmp_name']);
        next($_FILES['files']['tmp_name']);
        $files[$i]['error'] = current($_FILES['files']['error']);
        next($_FILES['files']['error']);
        $files[$i]['size'] = current($_FILES['files']['size']);
        next($_FILES['files']['size']);
    }

    $_FILES = $files;

}

This function is being called within the API controller:

public function my_file_upload_post() {

        if( ! $this->post('submit')) {
            $this->response(NULL, 400);
        }

        $data = $this->post('data');
        multifile_array();

        $foldername = './uploads/' . $this->post('property_id');

        if(!file_exists($foldername) && !is_dir($foldername)) {
            mkdir($foldername, 0750, true);
        }

        $config['upload_path'] = $foldername;
        $config['allowed_types'] = 'gif|jpg|png|doc|docx|pdf|xlsx|xls|txt';
        $config['max_size'] = '10240';

        $this->load->library('upload', $config);

        foreach ($data as $file => $file_data) {
            $this->upload->do_upload($file);

            //echo '<pre>';
            //print_r($this->upload->data());
            //echo '</pre>';

      }


        if ( ! $this->upload->do_upload() ) {
            return $this->response(array('error' => strip_tags($this->upload->display_errors())), 404);
        } else {
            $upload = $this->upload->data();
            return $this->response($upload, 200);

        }



    }

I am happy to share my code, I did manage to get multiple files uploading no worries, but just trying to set it up with the API so I can call it from an external website, internally or an iPhone. Help would be appreciated.

Cheers

Update:

Here is the code from the API Controller:

function upload_post() {

        $foldername = './uploads/' . $this->post('property_id');

        if(!file_exists($foldername) && !is_dir($foldername)) {
            mkdir($foldername, 0750, true);
        }

        $config['upload_path'] = $foldername;
        $config['allowed_types'] = 'gif|jpg|png|doc|docx|pdf|xlsx|xls|txt';
        $config['max_size'] = '10240';

        $this->load->library('upload', $config);        

        if ( ! $this->upload->do_upload())
        {
            //return $this->response(array('error' => strip_tags($this->upload->display_errors())), 404);
            return $this->response(array('error' => var_export($this->post('file'), true)), 404);

        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
            return $this->response(array('error' => $data['upload_data']), 404);
        }
return $this->response(array('success' => 'successfully uploaded' ), 200);      
}

This works if you go directly to the API from the form, but you need to put in the username and password within the browser. If I run this via the controller then it can't find the images.

1 Answer 1

1

This is not exactly what you asked for, but this is what I used to solve this problem. A PHP/jQuery upload widget!

http://blueimp.github.com/jQuery-File-Upload/

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.