0

我正在使用cordova 文件传输插件,以便用户在我的应用程序中上传图片。

当向我的服务器上的 php 页面发出正常的 http 请求时,我的代码运行良好。我想发出一个安全请求,所以我尝试使用 https,但是我收到 406 错误(有关错误详细信息,请参阅屏幕截图)

在此处输入图像描述

我在应用程序中发出的所有其他 ajax 请求都使用 https 成功运行。

我目前在发出请求时没有发送任何标头,但是可以选择使用文件传输插件来执行此操作。

我已经研究了如何解决这个错误(例如这里的这个问题)但是我仍然不确定我需要做什么。我想知道你能帮我确定我需要什么标题吗?

这是我的代码:

Javascript

function uploadProfilePic(){
    var token = localStorage.getItem("usertoken");      
    var defs = [];
    var def = $.Deferred();
    function win(r) {   

        if($.trim(r.response) === "0") {
            alert("Sorry! We have encountered an error");
            def.resolve(0);
        }else{

            def.resolve(1);     
        }
    }       
    function fail(error) {

        //upload of pic failed.
        alert("Sorry! We have encountered an error: " + JSON.stringify(error));
        def.resolve(0);
    }
    var uri = encodeURI("https://www.example.com/update_profile_pic.php");

    var options = new FileUploadOptions();
    options.fileKey="profile_pic_image_file";
    options.mimeType="image/jpeg";

    var params = new Object();
    params.usertoken = token; 
    params.app_root_url = app_root_url;

    //not sure what headers to add here.
    //var headers={'headerParam':'headerValue'};
    //options.headers = headers;

    options.params = params;


    var ft = new FileTransfer();
    ft.onprogress = function(progressEvent){
        if(progressEvent.lengthComputable){
                loadingStatus.setPercentage(progressEvent.loaded / progressEvent.total);
            }else{
                loadingStatus.increment();
            }
    };

    ft.upload($ESAPI.encoder().encodeForURL(profileImage), uri, win, fail, options);
    defs.push(def.promise());

    $.when.apply($, defs).then(function() { 
        //pic uploaded fine

    }); 
}

PHP (upload_profile_pic.php)

header("Access-Control-Allow-Origin: *");   

if(isset($_FILES['profile_pic_image_file'])){
    $data['profile_image_is_set'] = true;


    //do stuff with profile image here

    echo json_encode($data);
}else{
    $data['profile_image_is_set'] = false;
        //image not set 
    echo json_encode($data);
}
4

0 回答 0