【问题标题】:JQuery Validation for input type file failing on server side输入类型文件的 JQuery 验证在服务器端失败
【发布时间】:2012-06-22 03:42:25
【问题描述】:

所以我正在尝试一个非常简单的表单,其中包含一个字段来上传图片。输入类型是文件。还有一个提交按钮。该表单没有 action="" 并且客户端的验证使用 Jquery Validation 插件进行。客户端的验证非常完美(它返回文件类型错误),但是一旦我单击上传,服务器端的上传就会失败(PHP 文件)。我不认为该文件正在服务器端读取,因为 if 条件失败。我的代码是这样的:

<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
<script language="javascript">
    $(document).ready(function(){
        $("#upload").validate({
            debug: false,
            rules: {
                file: {required: true, accept: "gif|png|jpg|jpeg"}
            },
            messages: {
                file: "*Please select a file",
            },
            submitHandler: function(form) {
                // do other stuff for a valid form
                var phpurl = 'upload_file.php';
                $.post(phpurl, $("#upload").serialize(), function(data) {
                    alert(data);
                });
            }
        });
    });
</script>

PHP 代码:

<?php
if (($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    print "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    print "Upload: " . $_FILES["file"]["name"] . "<br />";

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

我收到的警告输出 - 始终是无效文件。

如果我在没有 Jquery 验证的情况下尝试表单并直接使用 action="upload_file.php 方法,它会完美运行。有什么问题?

HTML:

<form id="upload" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

【问题讨论】:

  • 对不起,这不能回答我的问题。我的问题是针对我正在使用的 JQuery 验证插件的 - 它提供对输入类型文件的支持。我只是使用插件对其进行验证,然后将其发送到 PHP 文件进行处理。

标签: php javascript jquery forms jquery-validate


【解决方案1】:

您需要使用有用的jQuery validation 插件,该插件确实支持您希望允许上传的文件,而不是其他不错的选项。

您可以使用验证插件的接受属性来允许您想要的文件类型,这里是一个示例:

$("#form_id").validate({
  rules: {
    field: {
      required: true,
      filesize: 1048576,
      accept: "gif|jpeg"
    }
  }
});

【讨论】:

  • 它不工作,你能提供任何示例程序或提琴手的例子吗?
【解决方案2】:

问题是无法通过ajax post提交文件,因为PHP不会将它们上传到服务器。

理论上你应该创建一个 iframe 并在那里提交表单。在实践中,只需使用这个 jquery 插件...http://jquery.malsup.com/form/ :) 它将简化流程

希望对你有帮助。

Is it possible to use Ajax to do file upload?

【讨论】:

  • 那么有没有办法在不摆脱我的 Jquery Validation 插件的情况下做到这一点?
  • 可以像blueimp's jQuery file upload 中使用的那样仅在 HTML5 中使用 Ajax 上传文件,但是我同意将其提交到 iframe 通常是一种更简单的跨浏览器方式。
  • 所以问题出在验证脚本上。如果我没记错的话,文件已经过验证,但不能使用 $.post 方法传递。我找到了一个解决方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2018-12-28
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
相关资源
最近更新 更多