2014-11-03 108 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