У меня проблема с плагином для передачи файлов, который я не могу понять. Мой код работает, когда я использую http, но когда я пытаюсь загрузить через https, кажется, что он не отправляет параметры в мой API, но он достигает моего API. только файл отсутствует, заголовок x-session-token присутствует и действителен. Это код, который я использую для загрузки файла:
$scope.options = {};
$scope.options.fileKey = "file";
$scope.options.fileName = $scope.img.substr($scope.img.lastIndexOf('/') + 1);
$scope.options.mimeType = "image/jpeg";
$scope.options.headers = {
'x-session-token' : window.localStorage.auth
};
// parameters: source, filePath, options
$cordovaFile.uploadFile("https:/****/api.php/profielpic/", $scope.img, $scope.options, true).then(function(result) {
console.log(result);
$cordovaToast.showShortTop('Uploaden gelukt!').then(function(success) {
$ionicLoading.hide();
$state.go('tab.profiel');
}, function (error) {
$ionicLoading.hide();
$state.go('tab.profiel');
});
}, function(err) {
console.log(err);
$ionicLoading.hide();
});
Это код, который я использую на стороне сервера, чтобы увидеть, есть ли что-нибудь:
$app->post('/profielpic/', function () use ($app) {
$auth = new api\src\Auth;
$users = new api\src\Users;
$authdata = json_decode($app->request->headers->get('x-session-token'));
$data = json_decode($app->request->getBody());
$userid = $authdata->userID ;
$session_token = $authdata->session_token;
$userdata = $data->userdata;
$alertsarray = array();
$message = null;
$isValid = true;
$authresult = $auth->authenticate($userid, $session_token);
$imgname = time();
print_r(json_encode($authdata));
print_r(json_encode($_FILES));
print_r(json_encode($_POST));
print_r(json_encode($data));
print_r(json_encode(file_get_contents("php://input")));
/*
if($authresult === true) {
$res = $users->updateUserPicture($userid, $_FILES['file']);
if($res === false) {
$isValid = false;
$message = "Er ging iets mis.";
}else{
$message = $res;
}
}else {
$isValid = true;
$message = $authresult;
}*/
$dataArray = array(
'isValid' => $isValid,
'message' => $message
);
echo ")]}',\n".json_encode($dataArray);
});
но все пусто с https: // если я загружаю на http: // это работает
Кто-нибудь знает, почему http работает, а https не работает? единственный случай, когда https не работает, это загрузка файлов. остальные мои маршруты API работают с https.
Это происходит на устройствах iOS и Android, поэтому проблема, скорее всего, связана с тонким API.
Api ответ:
{
"bytesSent": 32889,
"responseCode": 200,
"response": "{\"userID\":\"2\",\"session_token\":\"****"} {\
"file\":{\"name\":\"modified.jpg?1427448587960\",\"type\":\"image\\/jpeg\",\"tmp_name\":\"\\/tmp\\/phpABKyF2\",\"error\":0,\"size\":37491}}[]null\"\")]}',\n{\"isValid\":true,\"message\":null}",
"objectId": ""}
Убедитесь, что вы используете действительный сертификат SSL. Если ваше приложение достигает API, но не отправляет данные, вероятно, ваше приложение обнаружило, что соединение небезопасно. Он будет отправлять данные только после того, как установит безопасное соединение с сервером, которому может доверять.
Самоподписанный сертификат будет не быть доверенным.
Других решений пока нет …