0

我正在尝试使用jQuery 表单插件来执行 ajax 文件上传。我复制了其中一个示例,当我尝试上传时,出现以下文本:

100%
无效文件

控制台指示:

XHR 完成加载:

但没有上传任何内容。

我正在使用 XAMPP,并已使用 chmod -R 777 对我的上传文件夹启用了许可。我要上传的文件是 .png。下面是代码:

索引.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);
    }
}); 
});

上传.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用于其他上传并且工作正常。

感谢您的帮助。

4

2 回答 2

0

如果更改插件不打扰您,那么您必须尝试一些更好的插件,例如我正在使用的这个插件,它对开发人员和用户也非常友好。

从这里获取带有演示文件的完整源代码。我敢肯定,您不必进行很多更改即可将此插件集成到您现有的代码中:) 希望这对您有所帮助

于 2014-04-25T11:47:04.133 回答
0

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

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

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

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

于 2013-03-30T12:25:26.013 回答