2013-07-23 76 views
2

所以我想在我的网站上使用fine-uploader(最小的jQuery演示)上传一些图片到web服务器上传文件夹。然而,上传总是失败,我不知道为什么。Fine-uploader上传错误

当我点击“上传文件”,然后选择一个文件时,它开始上传(进度开始填充),当它到达100%它说“上传失败”,并给出了检查元素此错误: "Upload failed" error (Bigger size image)

这里是upload.html:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Fine Uploader - jQuery Wrapper Minimal Demo</title> 
    <link href="css/fineuploader-3.6.3.css" rel="stylesheet"> 
    </head> 
    <body> 
    <div id="fine-uploader"></div> 

    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script src="js/jquery.fineuploader-3.6.3.js"></script> 
    <script> 
     function createUploader() { 
     var uploader = new qq.FineUploader({ 
      element: document.getElementById('fine-uploader'), 
      request: { 
      endpoint: 'upload_file.php' 
      } 
     }); 
     } 

     window.onload = createUploader; 
    </script> 
    </body> 
</html> 

而且upload_file.php:

<?php 
for($i=0; $i<count($_FILES['file']['type']); $i++) { 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$temp = explode(".", $_FILES["file"]["name"][$i]); 
$extension = end($temp); 
if ((($_FILES["file"]["type"][$i] == "image/gif") 
|| ($_FILES["file"]["type"][$i] == "image/jpeg") 
|| ($_FILES["file"]["type"][$i] == "image/jpg") 
|| ($_FILES["file"]["type"][$i] == "image/pjpeg") 
|| ($_FILES["file"]["type"][$i] == "image/x-png") 
|| ($_FILES["file"]["type"][$i] == "image/png")) 
&& ($_FILES["file"]["size"][$i] < 50000000) 
&& in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"][$i] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"][$i] . "<br>"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"][$i] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"][$i] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"][$i]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"][$i] . "<br>"; 

    if (file_exists("upload\\" . $_FILES["file"]["name"][$i])) 
     { 
     echo $_FILES["file"]["name"][$i] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"][$i], 
     "\\upload\\" . $_FILES["file"]["name"][$i]); 
     echo "Stored in: " . "upload\\" . $_FILES["file"]["name"][$i]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
} 

?> 
+0

可能是一个好主意,检查你的上传目录存在,目录中的脚本匹配和权限在该目录设置。 – 2013-07-23 13:15:23

+1

该目录存在但我如何检查权限?并且需要哪些权限才能够上传到该目录? – DaftDev

+0

如果你的服务器是windows,你不需要设置任何权限。如果你在Linux上,你可以。您应该可以使用您的FTP客户端更改权限。这里是关于[文件权限](http://www.elated.com/articles/understanding-permissions/)的文章。权限应该是755. – 2013-07-23 13:34:19

回答

2

您没有返回有效的JSON响应。一个简单的方法可以使用json_encode

将当前的回显行放入数组中,并在使用json_encode后回显该数组,以获得有效的JSON响应。

0
<?php 

    $allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $_FILES["qqfile"]["name"]); 
    $extension = end($temp); 

    /** 
    * This is just additional 
    * 
    */ 

    $folder = dirname(__FILE__) ."/testuploads"; 

    if(!is_dir($folder)) 
    { 
     @mkdir($folder , 777); 
    } 



    /** 
    * I remove the for loop since we are expecting a single file. 
    * The uploader supports multi uploads but what it exactly does is sending multiple request. See in the firebug. 
    * 1 request per file. 
    */ 
    if ((($_FILES["qqfile"]["type"] == "image/gif") 
    || ($_FILES["qqfile"]["type"] == "image/jpeg") 
    || ($_FILES["qqfile"]["type"] == "image/jpg") 
    || ($_FILES["qqfile"]["type"] == "image/pjpeg") 
    || ($_FILES["qqfile"]["type"] == "image/x-png") 
    || ($_FILES["qqfile"]["type"] == "image/png")) 
    && ($_FILES["qqfile"]["size"] < 50000000) 
    && in_array($extension, $allowedExts)) 
     { 
     if ($_FILES["qqfile"]["error"] > 0) 
     { 
      $msg['return_code'] = "Return Code: " . $_FILES["qqfile"]["error"] . "<br>"; 

     } 
     else 
     { 
     /* 
     * I put the extra messages into array so we can display it later in json format. 
     */ 
     $msg['upload'] = "Upload: " . $_FILES["qqfile"]["name"] . "<br>"; 
     $msg['type'] = "Type: " . $_FILES["qqfile"]["type"] . "<br>"; 
     $msg['size'] = "Size: " . ($_FILES["qqfile"]["size"]/1024) . " kB<br>"; 
     $msg['temp_file'] = "Temp file: " . $_FILES["qqfile"]["tmp_name"] . "<br>"; 




     if($_FILES["qqfile"]["name"] <> "") 
     if (file_exists($folder."/" . $_FILES["qqfile"]["name"])) 
      { 
      $msg['error_msg'] = $_FILES["qqfile"]["name"] . " already exists. "; 

      } 
     else 
      { 

      move_uploaded_file($_FILES["qqfile"]["tmp_name"], 
      $folder."/" . $_FILES["qqfile"]["name"]); 
     $msg['success_msg'] = "Stored in: " .$folder."/" . $_FILES["qqfile"]["name"]; 
     /** 
     * Since we get here we have to tell your handler that the process is success 
     */ 
     $msg['success'] = "true"; 
      } 
     } 
     } 
    else 
     { 
     $msg['error_msg'] = "Invalid file"; 
     $msg['success'] = "false"; 
     } 
    /** 
    * Display the result in json format. 
    */ 
    print json_encode($msg); 
?> 

第一件事是从循环中删除它。即使它支持多上传,它只能发送1个文件。看到火虫。然后我使用文件夹的绝对路径,然后将响应转换为JSON格式。上面提供的代码有意见。

+0

请为您的帖子/代码提供一些解释。 –

+0

谢谢Ray Nicholus,我只是不小心碰到了输入。 =) – ROMMEL