2014-02-20 21 views
1

我发现了一个名为 RubaXa/jquery.fileapi 的有用工具,它可以对文件进行切片并创建斑点。但是在文档中缺少关于如何在服务器上处理上传部分的信息。该页面上的示例引用url: './ctrl.php',但您无法在开发者页面上看到它的内容。到目前为止,我使用了这个(看下面)客户端脚本,并没有错误。一个文件被切片,并在我的萤火虫控制台中出现了几个请求。所以它似乎工作。但是如何在服务器上处理PHP中接收到的文件部分?如何使用RubaXa File API在php中上传文件blob?

进口脚本:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script> 
    <script> 
     window.FileAPI = { 
       debug: false // debug mode 
      , staticPath: 'jquery.fileapi-master/FileAPI/' // path to *.swf 
     }; 
    </script> 
    <script src="jquery.fileapi-master/FileAPI/FileAPI.min.js"></script> 
    <script src="jquery.fileapi-master/jquery.fileapi.min.js"></script> 

的fileuploader的启动和设置:

jQuery(function ($){ 
     $('#uploader').fileapi({ 
      url: 'stash.php', 
      autoUpload: true, 
      accept: 'video/*', 
      multiple: false, //only single file upload     
      chunkSize: .5 * FileAPI.MB //filesize of the blobs/chunks 
     }); 
    }); 

的HTML文件上传 “形式”:

<div id="uploader"> 
    <div class="js-fileapi-wrapper"> 
     <input type="file" name="files[]" /> 
    </div> 
    <div data-fileapi="active.show" class="progress"> 
     <div data-fileapi="progress" class="progress__bar"></div> 
    </div> 
</div> 

回答

1

希望这代码将有所帮助你

<?php 
/** 
* FileAPI upload controller (example) 
*/ 


include './FileAPI.class.php'; 


if(!empty($_SERVER['HTTP_ORIGIN'])){ 
    // Enable CORS 
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']); 
    header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 
    header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Range, Content-Disposition, Content-Type'); 
} 


if($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){ 
    exit; 
} 


if(strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'){ 
    $files = FileAPI::getFiles(); // Retrieve File List 
    $images = array(); 


    // Fetch all image-info from files list 
    fetchImages($files, $images); 


    // JSONP callback name 
    $jsonp = isset($_REQUEST['callback']) ? trim($_REQUEST['callback']) : null; 


    // JSON-data for server response 
    $json = array(
      'images' => $images 
     , 'data' => array('_REQUEST' => $_REQUEST, '_FILES' => $files) 
    ); 


    // Server response: "HTTP/1.1 200 OK" 
    FileAPI::makeResponse(array(
      'status' => FileAPI::OK 
     , 'statusText' => 'OK' 
     , 'body' => $json 
    ), $jsonp); 
    exit; 
} 




function fetchImages($files, &$images, $name = 'file'){ 
    if(isset($files['tmp_name'])){ 
     $filename = $files['tmp_name']; 
     list($mime) = explode(';', @mime_content_type($filename)); 

     if(strpos($mime, 'image') !== false){ 
      $size = getimagesize($filename); 
      $base64 = base64_encode(file_get_contents($filename)); 

      $images[$name] = array(
        'width' => $size[0] 
       , 'height' => $size[1] 
       , 'mime' => $mime 
       , 'size' => filesize($filename) 
       , 'dataURL' => 'data:'. $mime .';base64,'. $base64 
      ); 
     } 
    } 
    else { 
     foreach($files as $name => $file){ 
      fetchImages($file, $images, $name); 
     } 
    } 
} 
?>