2013-10-30 137 views
3

我想上傳一個文件,將它發送到javascript的formData對象,並通過ajax將一些php腳本放到數據庫中。當我上傳配置文件php中的文件時,它工作正常,將它發送到javascript中的formData對象並將其發送回profile.php。問題是,當我想將formData對象發送到其他一些不是profile.php的php腳本時,它不起作用。PHP文件上傳,發送formdata對象

這裏是我的代碼:

profile.php

<form role="form" id="editUserProfile" method="post" action="" enctype="multipart/form-data"> 
    <input type="file" id="filename" name="filename" class="file-input" accept="image/*"/></a> 
    <button type="submit">Save</button 
</form> 

javascript.js

$('#editUserProfile').validate({ 
     submitHandler: function (form) { 
      var aFormData = new FormData(); 

      aFormData.append("filename", $('#filename').get(0).files[0]); 

      $.ajax({ 
       type: "POST", 
       url: "script.php", 
       data: aFormData, 
       success: function(data){ 
        window.location.reload(true); 
       } 
      }) 
     } 
    }); 

而且比我想在其他一些PHP(script.php的)腳本,如果檢查文件已上傳。

if(is_uploaded_file($_FILES['filename']['tmp_name']) && getimagesize($_FILES['filename']['tmp_name']) != false){ 
    $size = getimagesize($_FILES['filename']['tmp_name']); 
    $type = $size['mime']; 
    $imgfp = fopen($_FILES['filename']['tmp_name'], 'rb'); 
    $size = $size[3]; 
    $name = $_FILES['filename']['name']; 
    $maxsize = 99999999; 

    if($_FILES['userfile']['size'] < $maxsize){ 
     $dbh = new PDO("mysql:host=localhost;dbname=test", 'root'); 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $dbh->prepare("INSERT INTO table (image_type ,image, image_size, image_name) VALUES (? ,?, ?, ?)"); 

     $stmt->bindParam(1, $type); 
     $stmt->bindParam(2, $imgfp, PDO::PARAM_LOB); 
     $stmt->bindParam(3, $size); 
     $stmt->bindParam(4, $name); 

     $stmt->execute(); 
    }else{ 
     throw new Exception("File Size Error"); 
    } 
} 
+0

很難精確地跟隨你如何想的東西的工作。你能逐項逐項從AJAX提交開始? – charlietfl

+0

好的。我有一個包含文件的aFormData對象,並且我希望它發送到script.php,我將檢查包含文件的對象是否成功收到。唯一的問題是進入if語句。我用腳本測試了這種情況,其中的表單和代碼運行良好,但我想在其他地方有一個函數,那就是問題所在。 – Erik

+0

'別的地方'是非常含糊的...請更新問題,詳細說明您希望發生的事情......提及步驟中的文件。您的描述過於寬鬆無法遵循 – charlietfl

回答

4

加入jQuery.ajax和現在的工作:

processData: false, 

contentType: false,