使用jQuery Form Plugin上传Ajax文件 - 文件错误无效

时间:2013-03-30 12:15:54

标签: javascript forms jquery upload

我正在尝试使用jQuery Form Plugin执行ajax文件上传。我复制了其中一个例子,当我尝试上传时,我会看到以下文字:

  

100%
  文件无效

控制台指示:

  

XHR完成加载:

但没有上传任何内容。

我正在使用XAMPP并使用chmod -R 777在我的上传文件夹中启用了permitions。我正在尝试上传的文件是.png。以下是代码:

的index.html

<form action="upload.php" method="post" enctype="multipart/form-data">
   <input type="file" name="myfile"><br>
   <input type="submit" value="Upload File to Server">
</form>
<div class="progress">
   <div class="bar"></div >
   <div class="percent">0%</div >
</div>
<div id="status"></div>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script src="ajax.js"></script>

ajax.js

$(document).ready(function() {

var bar = $('.bar');
var percent = $('.percent');
var status = $('#status');

$('form').ajaxForm({
    beforeSend: function() {
        status.empty();
        var percentVal = '0%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    uploadProgress: function(event, position, total, percentComplete) {
        var percentVal = percentComplete + '%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    success: function() {
        var percentVal = '100%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    complete: function(xhr) {
        status.html(xhr.responseText);
    }
}); 
});

upload.php的

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

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

注意我认为问题是从扩展而不是upload.php发生的,因为我使用这个php进行其他上传,它运行正常。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果扩展程序正常,则可能是大小问题:脚本正在检查$_FILES["file"]["size"] < 20000

我会尝试根据您的需要调整该参数。大小单位是千字节,因此20000KB~20MB。尝试检查你的图像是否更大。

$extension = end(explode(".", $_FILES["file"]["name"]))也可能是个问题,具体取决于您上传的文件:它应该有一个扩展名。

作为最后一次尝试,请检查$_FILES["file"]["type"]的值,也许您有一些mime类型错误。

答案 1 :(得分:0)

如果它不打扰你更改插件,那么你必须尝试更好的插件,如this one我使用它,它真的太开发人员友好和用户友好。

here获取演示文件的完整源代码。 我确定您不必进行太多更改即可将此插件集成到现有代码中:)希望这有助于您