2016-03-14 5 views
1

Я использую 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:

enter image description here

Google HTTP PUT запрос Body

enter image description here

Код, который инициирует по запросу в выше данного кода

     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. 
     } 

Что я делаю неправильно?

ответ

0

Похоже, что вы base64 кодируете данные, которые вы загружаете. Это не обязательно. У меня есть подозрение, что «поврежденный» файл, который хранится в GCS, является вашим фактическим файлом, закодированным только base64.