我正在使用ng-flow库将图像加载到服务器,在用户拖放图像后,我可以将HTML 5文件图像传送到我的控制器,我需要将其与ohter参数一起下载到服务器,如货币,我用Google搜索并发现最好的方法是转换为json表单数据并使用POST方法发送。当我从服务器得到响应时,我看到表单数据包含主题但不包含图像。可能有什么不对?
在以下代码中,url是真实的,您可以尝试获得自己的响应。
角度代码:
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的var_dump
"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 :(得分:0)
您应该将表单数据发送给控制器,试试这个:
数据:{subject:subject,data: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()内容作为第一个参数获取并获取第二个参数的上传位置。对于您的数据,您可以轻松使用它,如下所示:
uplFile($_POST['file']);