如何在ajax调用中传递输入类型文件数据

我是我的表格

<form name="photo" enctype="multipart/form-data" action="" method="post"> Photo    

以下代码用于通过调用self(同一文件)上传图像(代码来自http://www.webmotionuk.co.uk/php-jquery-image-upload-and-crop-v11/ )

 if (isset($_POST["upload"])) { //Get the file information $userfile_name = $_FILES['image']['name']; $userfile_tmp = $_FILES['image']['tmp_name']; $userfile_size = $_FILES['image']['size']; $userfile_type = $_FILES['image']['type']; $filename = basename($_FILES['image']['name']); $file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1)); //Only process if the file is a JPG, PNG or GIF and below the allowed limit if((!empty($_FILES["image"])) && ($_FILES['image']['error'] == 0)) { foreach ($allowed_image_types as $mime_type => $ext) { //loop through the specified image types and if they match the extension then break out //everything is ok so go and check file size if($file_ext==$ext && $userfile_type==$mime_type){ $error = ""; break; }else{ $error = "Only ".$image_ext." images accepted for upload
"; } } //check if the file size is above the allowed limit if ($userfile_size > ($max_file*1048576)) { $error.= "Images must be under ".$max_file."MB in size"; } }else{ $error= "Select an image for upload"; } //Everything is ok, so we can upload the image. if (strlen($error)==0){ if (isset($_FILES['image']['name'])){ //this file could now has an unknown file extension (we hope it's one of the ones set above!) $large_image_location = $large_image_location.".".$file_ext; $thumb_image_location = $thumb_image_location.".".$file_ext; //put the file ext in the session so we know what file to look for once its uploaded $_SESSION['user_file_ext']=".".$file_ext; move_uploaded_file($userfile_tmp, $large_image_location); chmod($large_image_location, 0777); $width = getWidth($large_image_location); $height = getHeight($large_image_location); //Scale the image if it is greater than the width set above if ($width > $max_width){ $scale = $max_width/$width; $uploaded = resizeImage($large_image_location,$width,$height,$scale); }else{ $scale = 1; $uploaded = resizeImage($large_image_location,$width,$height,$scale); } //Delete the thumbnail file so the user can create a new one if (file_exists($thumb_image_location)) { unlink($thumb_image_location); } } //Refresh the page to show the new uploaded image header("location:".$_SERVER["PHP_SELF"]); exit(); } }

现在我想用ajax做这个。 如何将文件数据传递给处理文件,以便我可以使用类似的东西

 $('#uploadBtn').live('click', function(){ var data = "upload=true"; $.ajax({ type: "POST", url: "process.php", data: data, cache: false, success: function(data){ } }); }); 

这是不可能的。

浏览器不支持通过ajax调用发送数据。

接受的解决方法是将文件发布到后台隐藏的iframe中(因此它看起来像ajax )。 这里的解决方案是找到您选择的’ ajax文件上传’库并使用它来上传文件。

好吧,我用firefox和chrome试过这样的东西:

 
" method="POST" enctype="multipart/form-data">

我最初将此代码与Java一起作为服务器端代码。 虽然,我不明白为什么这不适用于PHP。 但是,您的问题是如何在ajax调用中传递输入类型文件数据。 所以这就是我做到的。

试试这个:

 $.ajax( { type: 'POST', url: 'process.php', data: new FormData( this ), processData: false, contentType: false, cache: false, success: function(data){ } });