Php uses the web uploader plug-in to implement multipart file upload,

Source: Internet
Author: User
Tags flock

Php uses the web uploader plug-in to implement multipart file upload,

I recently studied the method of uploading large files and found the webuploader js plug-in for uploading large files. You can also refer to this article to learn about the usage of the Web Uploader File Upload plug-in.

Use

Use webuploader for simple direct selection to introduce

<! -- Introduce CSS --> <link rel = "stylesheet" type = "text/css" href = "webuploader Folder/webuploader.css"> <! -- Introduce JS --> <script type = "text/javascript" src = "webuploader Folder/webuploader. js"> </script>

HTML section

<Div id = "uploader" class = "wu-example"> <! -- Used to store file information --> <div id = "thelist" class = "uploader-list"> </div> <div class = "btns"> <div id = "picker "> select a file </div> <button id =" ctlBtn "class =" btn-default "> Start upload </button> </div>

Initialize Web Uploader

JQuery (function () {$ list = $ ('# thelist'), $ btn = $ (' # ctlBtn '), state = 'Pending', uploader; uploader = WebUploader. create ({// do not compress image resize: false, // swf file path swf: 'uploader.swf ', // file receiving server. Server: upload. php, // select the file button. Optional. // The internal operation is based on the current operation, which may be an input element or flash. pick: '# picker', chunked: true, chunkSize: 2*1024*1024, auto: true, accept: {title: 'images', extensions: 'gif, jpg, jpeg, bmp, png ', mimeTypes: 'image /*'}});

Upload. php Processing

The following is the php background code modified by yourself based on others' examples.

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");    header("Cache-Control: no-store, no-cache, must-revalidate");    header("Cache-Control: post-check=0, pre-check=0", false);    header("Pragma: no-cache");    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {      exit; // finish preflight CORS requests here    }    if ( !empty($_REQUEST[ 'debug' ]) ) {      $random = rand(0, intval($_REQUEST[ 'debug' ]) );      if ( $random === 0 ) {        header("HTTP/1.0 500 Internal Server Error");        exit;      }    }    // header("HTTP/1.0 500 Internal Server Error");    // exit;    // 5 minutes execution time    @set_time_limit(5 * 60);    // Uncomment this one to fake upload time    // usleep(5000);    // Settings    // $targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";    $targetDir = 'uploads'.DIRECTORY_SEPARATOR.'file_material_tmp';    $uploadDir = 'uploads'.DIRECTORY_SEPARATOR.'file_material';    $cleanupTargetDir = true; // Remove old files    $maxFileAge = 5 * 3600; // Temp file age in seconds    // Create target dir    if (!file_exists($targetDir)) {      @mkdir($targetDir);    }    // Create target dir    if (!file_exists($uploadDir)) {      @mkdir($uploadDir);    }    // Get a file name    if (isset($_REQUEST["name"])) {      $fileName = $_REQUEST["name"];    } elseif (!empty($_FILES)) {      $fileName = $_FILES["file"]["name"];    } else {      $fileName = uniqid("file_");    }    $oldName = $fileName;    $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;    // $uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName;    // Chunking might be enabled    $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;    $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;    // Remove old temp files    if ($cleanupTargetDir) {      if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {        die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');      }      while (($file = readdir($dir)) !== false) {        $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;        // If temp file is current file proceed to the next        if ($tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {          continue;        }        // Remove temp file if it is older than the max age and is not the current file        if (preg_match('/\.(part|parttmp)$/', $file) && (@filemtime($tmpfilePath) < time() - $maxFileAge)) {          @unlink($tmpfilePath);        }      }      closedir($dir);    }    // Open temp file    if (!$out = @fopen("{$filePath}_{$chunk}.parttmp", "wb")) {      die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');    }    if (!empty($_FILES)) {      if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {        die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');      }      // Read binary input stream and append it to temp file      if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {        die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');      }    } else {      if (!$in = @fopen("php://input", "rb")) {        die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');      }    }    while ($buff = fread($in, 4096)) {      fwrite($out, $buff);    }    @fclose($out);    @fclose($in);    rename("{$filePath}_{$chunk}.parttmp", "{$filePath}_{$chunk}.part");    $index = 0;    $done = true;    for( $index = 0; $index < $chunks; $index++ ) {      if ( !file_exists("{$filePath}_{$index}.part") ) {        $done = false;        break;      }    }    if ( $done ) {      $pathInfo = pathinfo($fileName);      $hashStr = substr(md5($pathInfo['basename']),8,16);      $hashName = time() . $hashStr . '.' .$pathInfo['extension'];      $uploadPath = $uploadDir . DIRECTORY_SEPARATOR .$hashName;      if (!$out = @fopen($uploadPath, "wb")) {        die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');      }      if ( flock($out, LOCK_EX) ) {        for( $index = 0; $index < $chunks; $index++ ) {          if (!$in = @fopen("{$filePath}_{$index}.part", "rb")) {            break;          }          while ($buff = fread($in, 4096)) {            fwrite($out, $buff);          }          @fclose($in);          @unlink("{$filePath}_{$index}.part");        }        flock($out, LOCK_UN);      }      @fclose($out);      $response = [        'success'=>true,        'oldName'=>$oldName,        'filePaht'=>$uploadPath,        'fileSize'=>$data['size'],        'fileSuffixes'=>$pathInfo['extension'],        'file_id'=>$data['id'],        ];      die(json_encode($response));    }   // Return Success JSON-RPC response    die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');

The above is all the content of this article, hoping to help you learn.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.