Я использую API клиента Javascript для сохранения изображения в облачном хранилище Google.Отправить изображение в HTTP Request Body
Облако хранения хочет, чтобы запрос на размещение был отправлен в его API-конечные точки. Я прочитал файл из ввода файла. Он информирует объект файла Javascript. После этого выполняется следующий код.
var reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = function (e) {
var base64Data = btoa(e.target.result);
gapi.client.load('storage', 'v1', function() {
var rpcRequest = gapi.client.request({
path: '/upload/storage/v1/b/bucketname/o',
method: 'POST',
params: {
'uploadType': 'resumable',
'name': file.name,
'Expires': <?php echo $this->expires ?>,
'GoogleAccessId': '<?php echo $this->accessid ?>',
'Signature': '<?php echo $this->signature ?>'
},
headers: {
'X-Upload-Content-Type': file.type,
'X-Upload-Content-Length': file.length,
'Content-Type': 'application/json; charset=UTF-8',
},
});
rpcRequest.execute(function (jsonResponse, rawResponse) {
var response = jQuery.parseJSON(rawResponse);
var session_uri = response.gapiRequest.data.headers.location;
initiateUpload(session_uri);
});
function initiateUpload(session_uri){
gapi.client.load('storage', 'v1', function() {
var rpcRequest = gapi.client.request({
path: session_uri,
method: 'PUT',
headers: {
'Content-Length': file.length,
'Content-Type': file.type,
},
body: base64Data,
});
rpcRequest.execute(function (jsonResponse, rawResponse) {
console.log(rawResponse);
});
});
}
});
}
Файл появляется в облачном хранилище, но поврежден. Я начал отлаживать HTTP-запросы и обнаружил, что тело сообщения по запросу отличается от стандартного запроса загрузки Google. Ниже приведены изображения органов запроса.
Мой HTTP PUT REQEST Body:
Google HTTP PUT запрос Body
Код, который инициирует по запросу в выше данного кода
var rpcRequest = gapi.client.request({
path: session_uri,
method: 'PUT',
headers: {
'Content-Length': file.length,
'Content-Type': file.type,
},
body: base64Data,
});
rpcRequest.execute(function (jsonResponse, rawResponse) {
console.log(rawResponse);
});
Я обрабатывать объект файла, читая его через считывающее устройство, а затем кодирования его
var reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = function (e) {
// request preparation logic goes here.
}
Что я делаю неправильно?