使用cordova filetransfer通过https上传文件

时间:2015-03-17 12:39:03

标签: php angularjs cordova ionic-framework slim

我遇到了文件传输插件的问题,我似乎无法弄清楚。当我使用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 i猜测

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": ""
}

1 个答案:

答案 0 :(得分:1)

确保使用的是有效的SSL证书。如果您的应用已达到API但未发送数据,则可能是您的应用已意识到连接不安全。只有在与可信任的服务器建立安全连接后,它才会发送数据。

自签名证书值得信任。