2010-09-23 169 views
1

我已经成功地porting over plupload into Codeigniter,但是当用户上传文件,文件名出来是这样的:_1,_2,_3等Plupload上传文件名发出

什么导致这个错误?

这是我笨控制器:

function do_upload($fileName) { 
     // Settings 
      $targetDir = getcwd() . "/uploads/"; 
      $cleanupTargetDir = false; // Remove old files 
      $maxFileAge = 60 * 60; // Temp file age in seconds 
      // 5 minutes execution time 
      @set_time_limit(5 * 60); 
      // usleep(5000); 
      // Get parameters 
      $chunk = isset($_REQUEST["chunk"]) ? $_REQUEST["chunk"] : 0; 
      $chunks = isset($_REQUEST["chunks"]) ? $_REQUEST["chunks"] : 0; 
      // Clean the fileName for security reasons 
      $fileName = preg_replace('/[^\w\._]+/', '', $fileName); 
      // Create target dir 
      if (!file_exists($targetDir)) 
       @mkdir($targetDir); 
      // Remove old temp files 
      if (is_dir($targetDir) && ($dir = opendir($targetDir))) { 
       while (($file = readdir($dir)) !== false) { 
        $filePath = $targetDir . DIRECTORY_SEPARATOR . $file; 
        // Remove temp files if they are older than the max age 
        if (preg_match('/\\.tmp$/', $file) && (filemtime($filePath) < time() - $maxFileAge)) 
         @unlink($filePath); 
       } 
       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"]; 
      if (strpos($contentType, "multipart") !== false) { 
       if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) { 
        // Open temp file 
        $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $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($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($targetDir . DIRECTORY_SEPARATOR . $fileName, $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($out); 
       } else 
        die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); 
      } 
      // Return JSON-RPC response 
      die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}'); 
     } 

外部链接:
CodeIgniter
Plupload

回答

1

我知道这是一个老问题,你可能想通了 - 但对于其他人谁遇到它像我一样: 在你的JavaScript函数,配置,或绑定,任何plupload功能 - 你传递'向上'和'文件'PARAMS?例如:flashuploader.bind('BeforeUpload',function(up,file){// TODO});

'up'和'file'是pluploads行中的成员 - 只是不确定它们来自哪里。

最初我只传入'文件'数组,名称未定义,但'id'存在 - 很奇怪。但是,将“up”添加到参数列表中解决了我的问题。