Handling plupload's chunked uploads on the server-side

前端 未结 2 1418
不知归路
不知归路 2020-11-29 07:26

When I use plupload to chunk files (setting option chunk_size), I get a separate PHP request for each chunk. Looking at $_FILES variable, each chun

相关标签:
2条回答
  • 2020-11-29 08:20

    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"}';
            }
        }
    
    0 讨论(0)
  • 2020-11-29 08:22

    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

    0 讨论(0)
提交回复
热议问题