2012-06-22 56 views
0

因此,我嘗試了一個非常簡單的形式,使用一個字段上傳圖像。輸入類型是一個文件。還有一個提交按鈕。表單沒有action =「」,客戶端的驗證通過Jquery Validation插件進行。在客戶端驗證發生完美(它返回文件類型錯誤),但只要我點擊上傳,上傳失敗在服務器端(PHP文件)。由於if條件失敗,我不認爲文件正在服務器端讀取。我的代碼是這樣的:在服務器端輸入類型文件失敗的JQuery驗證

<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> 
+0

http://stackoverflow.com/questions/543926/is-it-possible- to-use-ajax-to-do-file-upload –

+0

對不起,這不能回答我的問題。我的問題是特定於我使用的JQuery驗證插件 - 它提供對輸入類型文件的支持。我只是使用插件驗證它,然後將其發送到PHP文件進行處理。 – KaushikTD

回答

0

的問題是,文件無法通過Ajax後應當提交的PHP不會將它們上傳到服務器。

理論上你應該創建一個iframe並使表單在那裏提交。實際上只是使用這個jquery插件... http://jquery.malsup.com/form/ :)它會緩解過程

希望它有幫助。

Is it possible to use Ajax to do file upload?

+0

那麼有沒有辦法擺脫我的JQuery驗證插件? – KaushikTD

+0

如[blueimp的jQuery文件上傳](http://blueimp.github.com/jQuery-File-Upload/)中所使用的,只能在HTML5中上傳帶有Ajax的文件是可能的,但是我同意將它提交給iframe '通常是一種更簡單的跨瀏覽器方式。 –

+0

所以問題出在驗證腳本上。如果我沒有錯,文件將被驗證,但不能使用$ .post方法傳遞。儘管我找到了解決方法。謝謝! – KaushikTD

1

您需要使用有用jQuery validation插件,它不支持要允許上傳超過其他不錯的選擇其他的文件。

您可以使用接受驗證插件的屬性,讓你想要的文件類型,這裏有一個例子:

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

它不工作,你可以給任何示例程序或小提琴手的例子嗎? –

相關問題