Handling plupload's chunked uploads on the server-side Handling plupload's chunked uploads on the server-side php php

Handling plupload's chunked uploads on the server-side


Here is the way to parse the chunks, and store the result in $upload_file (change $uploaded_file to match what you need).

    $uploaded_file = '/tmp/uploadFile.jpg';    $chunks = isset($_POST["chunks"]) ? $_POST["chunks"] : 0;    // If we have a chunked operation...    if ($chunks > 0)    {        // Get the chunk number...        $chunk = isset($_POST["chunk"]) ? $_POST["chunk"] : 0;        if ($chunk == 0)        {           if (!isset($_SESSION['last_chunk']))           {              $_SESSION['last_chunk'] = array();           }           $_SESSION['last_chunk'][$_POST['unique_id']] = $chunk;        }        else        {           if ($_SESSION['last_chunk'][$_POST['unique_id']] != $chunk + 1)           {                die('{"jsonrpc" : "2.0", "error" : {"code": 192, "message": "Uploaded chunks out of sequence.  Try again."}, "id" : "id"}');           }        }        $tmp_dir = sys_get_temp_dir();        // We need a unique filename to identify the file...        $tmp_filename = $tmp_dir.$_POST['unique_id'];        // If it is the first chunk we have to create the file, othewise we append...        $out_fp = fopen($tmp_filename, $chunk == 0 ? "wb" : "ab");        // The file we are reading from...        $uploaded_file = $_FILES['file']['tmp_name'];        $in_fp = fopen($uploaded_file, "rb");        // Copy the chunk that was uploaded, into the file we are uploading...        while ($buff = fread($in_fp, 4096))        {            fwrite($out_fp, $buff);        }        fclose($out_fp);        fclose($in_fp);        // If we are the last chunk copy the file to the final location and continue on...        if ($chunk == $chunks - 1)        {            copy($tmp_filename, $uploaded_file);            unset($_SESSION['last_chunk'][$_POST['unique_id']]);            if (count($_SESSION['last_chunk']) == 0)            {                  unset($_SESSION['last_chunk']);            }        }        else        {            // Otherwise report the result to the uploader...            echo'{"jsonrpc" : "2.0", "result" : null, "id" : "id"}';        }    }


In the end I used the code from official example bundled with plupload-1.5.2 (examples/upload.php):

http://github.com/moxiecode/plupload/blob/master/examples/upload.php