因此,我嘗試了一個非常簡單的形式,使用一個字段上傳圖像。輸入類型是一個文件。還有一個提交按鈕。表單沒有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>
http://stackoverflow.com/questions/543926/is-it-possible- to-use-ajax-to-do-file-upload –
對不起,這不能回答我的問題。我的問題是特定於我使用的JQuery驗證插件 - 它提供對輸入類型文件的支持。我只是使用插件驗證它,然後將其發送到PHP文件進行處理。 – KaushikTD