2012-04-22 42 views
0

我建立一個圖片上傳功能,我的網站和,而不是浪費時間我自己的滾動上傳我決定使用pluploader。我以前使用過這個上傳器,並且它開箱即用,但是這次我無法使用這個工具。
我的上傳頁面代碼:Plupload顯示更迭,但在上傳目錄圖像不

<script type="text/javascript"> 
$(function() { 
$("#uploader").plupload({ 
    // General settings 
    runtimes : 'html5,gears,flash,silverlight,browserplus', 
    url : '/plupload/examples/upload.php', 
    max_file_size : '10mb', 
    chunk_size : '1mb', 

    // Specify what files to browse for 
    filters : [ 
     {title : "Image files", extensions : "jpg,gif,png"}, 
    ], 

    // Flash settings 
    flash_swf_url : '/plupload/js/plupload.flash.swf', 

    // Silverlight settings 
    silverlight_xap_url : '/plupload/js/plupload.silverlight.xap' 

}); 
    // Client side form validation 
$('form').submit(function(e) { 
    var uploader = $('#uploader').plupload('getUploader'); 

    // Files in queue upload them first 
    if (uploader.files.length > 0) { 
     // When all files are uploaded submit form 
     uploader.bind('StateChanged', function() { 
      if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) { 
       $('form')[0].submit(); 
      } 
     }); 

     uploader.start(); 
    } else 
     alert('You must at least upload one file.'); 

    return false; 
}); 

}); 
</script> 

然後我上傳的文件:

<?php 
/** 
* upload.php 
* 
* Copyright 2009, Moxiecode Systems AB 
* Released under GPL License. 
* 
* License: http://www.plupload.com/license 
* Contributing: http://www.plupload.com/contributing 
*/ 

// HTTP headers for no cache etc 
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"); 

// Settings 
//$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; 
$targetDir = 'imgs' . DIRECTORY_SEPARATOR . 'uploads'; 

$cleanupTargetDir = false; // Remove old files 
$maxFileAge = 5 * 3600; // Temp file age in seconds 

// 5 minutes execution time 
@set_time_limit(5 * 60); 

// Uncomment this one to fake upload time 
// usleep(5000); 

// Get parameters 
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; 
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; 
$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ''; 

// Clean the fileName for security reasons 
$fileName = preg_replace('/[^\w\._]+/', '_', $fileName); 

// Make sure the fileName is unique but only if chunking is disabled 
if ($chunks < 2 && file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName)) { 
    $ext = strrpos($fileName, '.'); 
    $fileName_a = substr($fileName, 0, $ext); 
    $fileName_b = substr($fileName, $ext); 

    $count = 1; 
    while (file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName_a . '_' . $count . $fileName_b)) 
     $count++; 

    $fileName = $fileName_a . '_' . $count . $fileName_b; 
} 

$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName; 

// Create target dir 
if (!file_exists($targetDir)) 
    @mkdir($targetDir); 

// Remove old temp files  
if ($cleanupTargetDir && is_dir($targetDir) && ($dir = opendir($targetDir))) { 
    while (($file = readdir($dir)) !== false) { 
     $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file; 

     // Remove temp file if it is older than the max age and is not the current file 
     if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge) && ($tmpfilePath != "{$filePath}.part")) { 
      @unlink($tmpfilePath); 
     } 
    } 

    closedir($dir); 
} else 
    die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}'); 


// Look for the content type header 
if (isset($_SERVER["HTTP_CONTENT_TYPE"])) 
    $contentType = $_SERVER["HTTP_CONTENT_TYPE"]; 

if (isset($_SERVER["CONTENT_TYPE"])) 
    $contentType = $_SERVER["CONTENT_TYPE"]; 

// Handle non multipart uploads older WebKit versions didn't support multipart in HTML5 
if (strpos($contentType, "multipart") !== false) { 
    if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) { 
     // Open temp file 
     $out = fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); 
     if ($out) { 
      // Read binary input stream and append it to temp file 
      $in = fopen($_FILES['file']['tmp_name'], "rb"); 

      if ($in) { 
       while ($buff = fread($in, 4096)) 
        fwrite($out, $buff); 
      } else 
       die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); 
      fclose($in); 
      fclose($out); 
      @unlink($_FILES['file']['tmp_name']); 
     } else 
      die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); 
    } else 
     die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); 
} else { 
    // Open temp file 
    $out = fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); 
    if ($out) { 
     // Read binary input stream and append it to temp file 
     $in = fopen("php://input", "rb"); 

     if ($in) { 
      while ($buff = fread($in, 4096)) 
       fwrite($out, $buff); 
     } else 
      die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); 

     fclose($in); 
     fclose($out); 
    } else 
     die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); 
} 

// Check if file has been uploaded 
if (!$chunks || $chunk == $chunks - 1) { 
    // Strip the temp .part suffix off 
    rename("{$filePath}.part", $filePath); 
} 


// Return JSON-RPC response 
die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}'); 

?> 

我有所有這些在我的腦海:

 <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" type="text/css" /> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> 
    <script src=" https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"></script> 

    <!-- Load plupload and all it's runtimes and finally the UI widget --> 
    <link rel="stylesheet" href="/plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css" type="text/css" /> 

    <script type="text/javascript" src="/plupload/js/plupload.js"></script> 
    <script type="text/javascript" src="/plupload/js/plupload.gears.js"></script> 
    <script type="text/javascript" src="/plupload/js/plupload.silverlight.js"></script> 
    <script type="text/javascript" src="/plupload/js/plupload.flash.js"></script> 
    <script type="text/javascript" src="/plupload/js/plupload.browserplus.js"></script> 
    <script type="text/javascript" src="/plupload/js/plupload.html4.js"></script> 
    <script type="text/javascript" src="/plupload/js/plupload.html5.js"></script> 
    <script type="text/javascript" src="/plupload/js/jquery.ui.plupload/jquery.ui.plupload.js"></script> 

它的工作原理,在我看到花哨的上傳框,可以選擇文件,點擊上傳,然後運行百分比,然後說上傳。但後來我得到了我的上傳目錄,那裏什麼也沒有。我已經嘗試了多個位置上載圖片,並沒有一個工作。而且我搜索了我的整個主機目錄中的圖像,並且它們尚未上傳。
任何想法?

編輯:
我有它上傳到臨時目錄,但第二次我用別的東西代替臨時目錄就開始發送無法打開temp目錄錯誤代碼100。仍然難以做什麼。

+0

你可以指定什麼都ü在DIRECTORY_SEPARATOR變量設置... – 2012-04-22 07:56:20

+0

我沒有,這是一個預定義的PHP變量。無論如何,即使使用常規的'/'也會出現錯誤。 – SpeedCrazy 2012-04-22 15:55:54

回答

1

Plupload展會的成功並不在於你要完成你想要完成什麼樣的手段。這隻意味着您的圖片上傳到服務器完成。之後,仍然會有異常情況發生,例如你的目錄無法成功或錯誤地返回錯誤狀態。

你可以使用Firebug或別的東西來調試代碼,看看有什麼是從你的服務器代碼的迴應,你應該做error_report上,那麼你可以看到真相。

可能是對你有所幫助。

+0

使error_report?我如何做到這一點(我假設你的意思是JS不是PHP) – SpeedCrazy 2012-04-22 15:54:50

+0

我跑它使用firbug和我得到這個:'{「jsonrpc」:「2.0」,「錯誤」:{「代碼」:100,「消息」 :「無法打開臨時目錄。」},「id」:「id」}' – SpeedCrazy 2012-04-22 20:03:51

+0

@SpeedCrazy:Hi SpeedCrazy,那ret意味着你的dir沒有成功。我想也許你的賬戶「www」不能寫網絡目錄。 – wedgwood 2012-04-23 01:40:11

0

是的,PLUpload小部件的進度條僅僅意味着它是成功發送文件到服務器。這並不意味着您的上傳服務器正在正確處理收到的數據!

這可能是與PHP服務器的設置按我的崗位做在http://www.plupload.com/punbb/viewtopic.php?id=1985