Bir projenin N katılımcısıyla kaydedilmesini sağlamak için bir formum var. Her katılımcının okul sertifikalarını göndermesi gereken bir alan eklemem istendi.
Sorun şu ki, bu alanı bir nesnenin içine eklediğimde, verileri artık PHP'ye gönderemiyorum.Bir nesnenin içine bir dosya göndermek için AngularJS kullanın
ben göndermek zorunda JSON aşağıdaki biçimdedir:
$http({
method: "POST",
url: [SCRIPT],
headers: {
"Content-Type": undefined
},
data: $scope.data,
transformRequest: function (data) {
var formData = new FormData();
angular.forEach(data, function (value, key) {
formData.append(key, value);
});
return formData;
}
}).success(function(response) {
// do something
});
Ve PHP'de
, bu benim fonksiyonudur:{
"description": [STRING],
"name": [STRING],
"objective": [STRING],
"participants": [NUMBER],
"regulament": [BOOLEAN],
"resume": [STRING],
"users": {
"1": {
"born": [DATE],
"educationCertificate": [OBJECT], // File
"email": [STRING],
"genre": [BOOLEAN],
"level": [NUMBER],
"name": [STRING],
"neighborhood": [STRING],
"phone": [STRING],
"school": [STRING],
"socialNumber": [STRING]
},
. . .
"n": {
"born": [DATE],
"educationCertificate": [OBJECT (FILE)],
"email": [STRING],
"genre": [BOOLEAN],
"level": [NUMBER],
"name": [STRING],
"neighborhood": [STRING],
"phone": [STRING],
"school": [STRING],
"socialNumber": [STRING]
}
}
}
dosya göndermek için, benim $ http böyle görünüyordu angularjs tarafından gönderilen verileri almak:
function param() {
$array = array();
$request = new stdClass();
if (count($_GET) || count($_POST) || count($_FILES)) {
$request = json_decode(json_encode(array_merge($_GET, $_POST, $_FILES)), false);
} else {
$request = json_decode(file_get_contents("php://input"));
}
if ($request) {
$array = array_filter(array_map(function($data) {
return is_string($data) ? trim($data) : $data;
}, get_object_vars($request)), function($data) {
return is_string($data) ? strlen($data) : $data;
});
}
return json_decode(json_encode($array), false);
}
/* In the script */
$request = param();
Ancak PHP geliyor verileri aşağıdaki gibidir:
{
"description": [STRING],
"name": [STRING],
"objective": [STRING],
"participants": [NUMBER],
"regulament": [BOOLEAN],
"resume": [STRING],
"users": [STRING] // "[object Object]"
}
Hep kullanım "Content-Type": undefined
yapılmış ama "Content-Type": "multipart/form-data"
ve "Content-Type": "application/x-www-form-urlencoded;"
kullanmayı denedik. Ama sonuç daha da kötü.
Bu sorunun nasıl çözüleceğini bilen var mı?
Sen 'readAsDataURL() kullanabilirsiniz' (bu [SO söz] belirtildiği gibi http://stackoverflow.com/questions/6978156/get-base64-encode-file-data-from-input-form). Ayrıca tarayıcı desteğini geliştirmek için bir [Polyfill] (http://stackoverflow.com/questions/16712123/read-data-url-with-file-api-polyfill) bulunmaktadır. – AWolf