2014-11-03 107 views
0

我正在使用ng-flow庫將圖像加載到服務器,並且在用戶拖放圖像後,我可以將HTML 5文件圖像添加到我的控制器,並且需要將它與ohter參數一起下載到服務器,像貨幣,主題等我Google搜索,並發現最好的方法是轉換爲JSON格式的數據和POST方法發送。當我得到服務器的響應時,我看到表單數據包含主題但不包含圖像。什麼可能是錯的?角度提交表單數據

在下面的代碼網址是真實的,你可以嘗試得到你自己的迴應。

角碼:

var file = $flow.files[0]; 
$http({ 
      method: 'POST', 
      url: "http://yuppi.com.ua/server/rest/add.php?key=453sdfg3t&action=add",    
      headers: { 'Content-Type': false }, 

      transformRequest: function (data) { 

       var formData = new FormData(); 

       formData.append("subject", angular.toJson(data.subject)); 
       formData.append("file", data.file); 

       return formData;     
      }, 

      data: { subject: subject, file: file} 
     }). 
     success(function (data, status, headers, config) { 
      alert(data); 
     }). 
     error(function (data, status, headers, config) { 
      alert(data); 
     }); 

PHP代碼:

$form = file_get_contents("php://input"); 

echo "Form: "; print_r($form); 

的$ _FILES

"array(1) { 
    ["photo"]=> 
    array(5) { 
    ["name"]=> 
    string(14) "gradient-2.png" 
    ["type"]=> 
    string(9) "image/png" 
    ["tmp_name"]=> 
    string(14) "/tmp/phpY8nqji" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(442567) 
    } 
} 
+0

PHP中的$ _POST變量是什麼? – progsource 2014-11-03 17:46:17

+1

@progsource你的意思是'$ _FILES'吧?因爲'$ _POST'不會填充上傳的文件。 – Ohgodwhy 2014-11-03 17:47:26

+0

$ _POST和$ _FILES變量爲空。 – 2014-11-03 17:51:32

回答

0

你應該把你的表單數據到控制器的var_dump,試試這個:

數據:{主題:主題,數據:FORMDATA}

,你也需要首先定義FORMDATA通過發送HTTP $此。嘗試在最後:

var file = $flow.files[0]; 
var formData = new FormData(); 

$http({ 
      method: 'POST', 
      url: "http://yuppi.com.ua/server/rest/add.php?key=453sdfg3t&action=add",    
      headers: { 'Content-Type': false }, 

      transformRequest: function (data) { 

       formData.append("subject", angular.toJson(data.subject)); 
       formData.append("file", data.file); 

       return formData;     
      }, 

      data: { subject: subject, data: formData} 
     }). 
     success(function (data, status, headers, config) { 
      alert(data); 
     }). 
     error(function (data, status, headers, config) { 
      alert(data); 
     }); 

和PHP的一部分,你可以使用這個功能,我已經寫了:

function uplFile($fn,$path='upload/'){ 
    $delim = explode(';base64,',$fn); 
    $type = str_replace('data:','',$delim[0]); 
    switch ($type) { 
     case "image/gif": 
      $type = '.gif'; 
      break; 
     case "image/jpeg": 
      $type = '.jpg'; 
      break; 
     case "image/png": 
      $type = '.png'; 
      break; 
     case "image/bmp": 
      $type = '.bmp'; 
      break; 
    } 
    $data = base64_decode($delim[1]); 
    $file = uniqid() .$type; 
    $success = file_put_contents($path.$file, $data); 
    return $file; 
} 

該函數獲得FORMDATA()內容作爲第一個參數,並得到上傳位置第二parameter.For你的數據,你可以輕鬆地使用它如下所示:

uplFile($_POST['file']); 
+0

這是我對get_file_contenets的迴應,但POST和文件仍然是空的。----------------------------- 27672246989232 Content-Disposition:form -數據; name =「name」 ----------------------------- 27672246989232 Content-Disposition:form-data; NAME = 「文件」; filename =「eye.png」 Content-Type:image/png PNG – 2014-11-04 01:45:21

+0

所以它發送數據,你能告訴我什麼是'print_r($ _ POST)'的結果嗎? – OnlyMAJ 2014-11-05 09:55:01

+0

現在$ _POST沒問題,我看到所有參數,並且$ _FILES也不是空的,但似乎val ['tmp_file']不包含我的文件 – 2014-11-06 01:00:23