0

そこで、画像をアップロードするための1つのフィールドを持つ非常に単純なフォームを試しています。入力タイプはファイルです。送信ボタンもあります。フォームにはaction=""がなく、クライアント側での検証はJqueryValidationプラグインを使用して行われます。クライアント側での検証は完全に行われますが(ファイルタイプエラーが返されます)、[アップロード]をクリックするとすぐに、サーバー側(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>
4

2 に答える 2

1

他の優れたオプション以外のアップロードを許可するファイルをサポートする便利なjQuery検証プラグインを使用する必要があります。

検証プラグインのacceptプロパティを使用して、必要なファイルタイプを許可できます。例を次に示します。

$("#form_id").validate({
  rules: {
    field: {
      required: true,
      filesize: 1048576,
      accept: "gif|jpeg"
    }
  }
});
于 2012-07-20T14:55:42.283 に答える
0

問題は、PHP がファイルをサーバーにアップロードしないため、ファイルを ajax ポスト経由で送信できないことです。

理論的には、iframe を作成し、そこにフォームを送信する必要があります。実際には、このjqueryプラグインを使用するだけです... http://jquery.malsup.com/form/ :)プロセスが楽になります

それが役に立てば幸い。

Ajax を使用してファイルのアップロードを行うことは可能ですか?

于 2012-06-22T03:49:25.740 に答える