upload a video and display its thumbnail preview using php

Ankit Chhatbar picture Ankit Chhatbar · Jan 5, 2015 · Viewed 9.6k times · Source

i need to upload a video in specific directory and when it is uploaded successfully then it display on page with its thumbnail preview:

CODE:

<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />  
          <table width="400" cellpadding="3" > 
            <tr> 
              <td colspan="3"> </td> 
            </tr> 
            <tr> 
              <td width="10" rowspan="2"> </td> 
              <td width="120"><strong>Choose a file to upload:</strong></td> 
              <td width="242"><input type="file" name="uploaded_file" /></td> 
            </tr> 
            <tr> 
              <td> </td> 
              <td> </td> 
            </tr> 
            <tr> 
              <td> </td> 
              <td> </td> 
              <td><input type="submit" name="sendForm" value="Upload File" /> 
                <br /></td> 
            </tr> 
            <tr> 
              <td colspan="3"> </td> 
            </tr> 
          </table> 
</form> 
<?php 

  // C:\wamp\www\scriptDir\uploads\;

  $idir = "C:/xampp/htdocs/xampp/video";   // Path To Images Directory 
  $tdir = "C:/xampp/htdocs/xampp/video";   // Path To Thumbnails Directory 
  $twidth = "200";   // Maximum Width For Thumbnail Images 
  $theight = "150";   // Maximum Height For Thumbnail Images 

  error_reporting(E_ALL ^ E_NOTICE); // Show all major errors. 

  // Check to see if the button has been pressed 
  if (!empty($_REQUEST['sendForm'])) 
  { 
    // Assign the name to a variable 
    $name = $_FILES['uploaded_file']['name']; 
    // Assign the tmp_name to a variable 
    $tmp_name = $_FILES['uploaded_file']['tmp_name']; 
    // Assign the error to a variable 
    $error = $_FILES['uploaded_file']['error']; 
    // Assign the size to a variable 
    $size = $_FILES['uploaded_file']['size'];
    // No trailing slash 
    $uploadFilesTo = 'video'; 
    // Create safe filename 
    $name = preg_replace('[^A-Za-z0-9.]', '-', $name); 
    // Disallowed file extensions 
    //what files you don't want upoad... leave this alone and you should be fine but you could add more 
    $naughtyFileExtension = array("php", "php3", "asp", "inc", "txt", "wma","js", "exe", "jsp", "map", "obj", " ", "", "html", "mp3", "mpu", "wav", "cur", "ani");  // Returns an array that includes the extension 

    //Allowable file Mime Types. Add more mime types if you want 
    $FILE_MIMES = array('video/mpg','video/avi','video/mpeg','video/wmv'); 
    //Allowable file ext. names. you may add more extension names. 
    $FILE_EXTS = array('.avi','.mpg','.mpeg','.asf','.wmv','.3gpp') ;
    $file_ext = strtolower(substr($name,strrpos($name,".")));  
    // to check the extensio
    if (!in_array($file_type, $FILE_MIMES) && !in_array($file_ext,$FILE_EXTS) ) 
    $message = "Sorry, $file_name($file_type) is not allowed to be uploaded.";  

    $fileInfo = pathinfo($name); 
    // Check extension 
    if (!in_array($fileInfo['extension'], $naughtyFileExtension)) 
    { 
      // Get filename 
      $name = getNonExistingFilename($uploadFilesTo, $name); 
      // Upload the file 
      if (move_uploaded_file($tmp_name, $uploadFilesTo.'/'.$name))  
      { 
          // Show success message 
          echo '<center><p>Your Video File has uploaded successfully<br />'.$uploadFilesTo.'/'.$name.'</p></center>'; 
      } 
      else 
      { 
          // Show failure message 
          echo '<center><p>File failed to upload to /'.$name.'</p></center>'; 
      } 
    } 
    else 
    { 
        // Bad File type 
        echo '<center><p>The file uses an extension we don\'t allow.</p></center>'; 
    } 
  } 

  // Functions do not need to be inline with the rest of the code 
  function getNonExistingFilename($uploadFilesTo, $name) 
  { 
      if (!file_exists($uploadFilesTo . '/' . $name)) 
          return $name; 

      return getNonExistingFilename($uploadFilesTo, rand(100, 200) . '_' . $name); 
  } 
?>

i have tried this code to upload video and generate thumbnail of particular video but it gives "file fail to upload to" only,if anyone have idea to do it,suggest some solution to perform this task.

Answer

sanoj lawrence picture sanoj lawrence · Jan 5, 2015

here is simple method to create thumb for video

you have to specify paths and thumb will be save .jpg formate

$videos_dir = 'path/to/videos';
$videos_dir = opendir($videos_dir);
$output_dir = 'path/to/output/dir/';
while (false !== ($file = readdir($videos_dir))) {
    if ($file != '.' && $file != '..'){
        $in = $videos_dir.'/'.$file;
        $out = $output_dir.$file.'.jpg';
        exec("/usr/local/bin/ffmpeg -itsoffset -105 -i ".$in." -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 ".$out);
    }
}

updated

<script>
    var vidDOM = $('article').children('video');
    var vid = vidDOM.get(2);
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    vidDOM.bind({
        'paused':function () {
            vid.width = canvas.width = vid.offsetWidth;
            vid.height = canvas.height = vid.offsetHeight;
            var $this = this; 
            ctx.drawImage($this, 0, 0, vid.width, vid.height);
            uploadbase64();
        }
    })

    function uploadbase64(){
        canvasData = canvas.toDataURL("image/jpeg"); 
        var ajax = new XMLHttpRequest();
        ajax.open("POST",'ImageUpload.php?filename='+vidDOM.id,false);
        ajax.setRequestHeader('Content-Type', 'application/upload');
        ajax.send(canvasData);
    }
</script>



<?php
    $filename =$_GET['filename'];

    if (file_get_contents('php://input')){
        // Remove the headers (data:,) part.
        $filteredData=substr(file_get_contents('php://input'), strpos(file_get_contents('php://input'), ",")+1);

        // Need to decode before saving since the data we received is already base64 encoded
        $decodedData=base64_decode($filteredData);

        //create the file
        if($fp = fopen( $filename, 'wb' )){
            fwrite( $fp, $decodedData);
            fclose( $fp );
        } else {
            echo "Could not create file.";
        }
}

echo "Created image ".$filename;

?>