kinvey rest api загрузить

Я пытаюсь загрузить на Kinvey, используя метод REST API.

Я могу успешно получить URL-ссылку на хранилище Google после отправки запроса POST на https://baas.kinvey.com/blob/:myAppId

Проблема в том, что когда я отправляю запрос «PUT» на URL-адрес хранилища Google, я получаю эту ошибку:

Не удается загрузить XMLHttpRequest (мой URL-адрес storage.google). Ответ на предварительный запрос не проходит проверку управления доступом: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Поэтому Origin (мой локальный хост) не имеет доступа.


person Jestoni    schedule 09.02.2016    source источник


Ответы (1)


Похоже, это довольно стандартная ошибка CORS (о которой вы можете прочитать НАМНОГО больше здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS ), что имеет место, когда вы делаете запрос из разных источников. Есть много разных способов решить эту проблему, но, вероятно, проще всего будет использовать один из наших SDK, чтобы помочь вам. Если вы посмотрите на http://devcenter.kinvey.com/html5/downloads, вы найдет SDK, который вы можете включить в свои проекты, а также руководства/документацию для него в верхней части навигации.

Загрузка файлов с использованием библиотеки HTML5 также довольно тривиальна. Вот пример кода, который я набросал:

HTML-часть:

<input type="file" name="_file" id="_file" onchange="fileSelected();" />
        <div id="fileinfo">
            <div id="filename"></div>
            <div id="filetype"></div>
        </div>

Часть Javascript:

function fileSelected(){
    var oFile = document.getElementById('_file').files[0];
    var oReader = new FileReader();
    oReader.onload = function(e) {
        document.getElementById('fileinfo').style.display = 'block';
        document.getElementById('filename').innerHTML = 'Name: ' + oFile.name;
        document.getElementById('filetype').innerHTML = 'Type: ' + oFile.type;
    };
    oReader.readAsDataURL(oFile);
    fileUpload(oFile);
}


function fileUpload(file) {
    var file = document.getElementById('_file').files[0];
    var promise = Kinvey.File.upload(file,{
        filename: document.getElementById('fileinfo').toString(),
        mimetype: document.getElementById('filetype').toString()
    })
    promise.then(function() {
        alert("File Uploaded Successfully");
    }, function(error){
        alert("File Upload Failure:  " +  error.description);
    });
}

Это будет немного отличаться для каждой из библиотек Javascript Kinvey, но должно следовать примерно одному и тому же плану. Получите файл, вызовите Kinvey.File.Upload асинхронно и позвольте SDK творить чудеса. Это должно справиться со всеми уродствами CORS для вас.

Спасибо,

person Damien-Kinvey    schedule 09.02.2016
comment
Вау, спасибо, сработало! Но я получаю сообщение об ошибке, хотя я не знаю, повлияет ли это на ход моего проекта: Response Content-Type header is set to text/html; charset=UTF-8. Expected it to be set to application/json. - person Jestoni; 10.02.2016
comment
Jestoni, можете ли вы открыть это как новый вопрос и написать мне в комментарии, так как это может быть что-то совершенно другое? Спасибо, - person Damien-Kinvey; 10.02.2016
comment
Вот мой новый пост: ссылка @damien-kinvey - person Jestoni; 10.02.2016