5

Próbuję przesłać wiele obrazów do usługi przechowywania w chmurze Google w żądaniu wsadowym przy użyciu javascript. Używam https://developers.google.com/storage/docs/json_api/v1/how-tos/batch#example jako odniesienia.Żądania przesyłania zbiorczego do usługi Google Cloud Storage przy użyciu javascript

Mam plik wejściowy, gdzie użytkownik może wybrać wiele plików, i „załadować” btn przesłać do GCS tak:

<input type="file" name="fileName" id="fileInput" multiple="multiple" onchange="javascript: loadFiles()"/> 
<input type="button" name="upload-btn" id="upload" value="Upload"/> 

Gdy użytkownik wybierze obrazów, funkcja „loadFiles” tworzy "treść" wniosku zbiorczego.

var tok = <token>; 
var boundary = "---======= foo_bar_baz12034245623562346 ==="; 
var consolidated_request = ''; 

function loadFiles() 
{ 
     var input = $('fileInput'); 
     for (var i = 0; i < input.files.length; i++) 
     { 
      var f = input.files[i]; 

      var reader = new FileReader(); 
      reader.readAsBinaryString(f); 

      reader.onload = function(e){ 

       var fbinary = e.target.result; 
       var fsize = f.size; 

       var url = 'https://www.googleapis.com/upload/storage/v1beta2/b/<mybucket>/o?'; 
       url += 'uploadType=media&name='+f.name+ ' HTTP/1.1'; 

       var req = boundary + 
       '\r\nContent-Type: application/http'+ 
       '\r\nContent-Transfer-Encoding: binary'+ 
       '\r\n\nPOST ' + url + 
       '\r\nContent-Type: image/jpeg'+ 
       '\r\nContent-Length: '+ f.size + 
       '\r\nAuthorization: '+tok+ 
       '\r\n\n'+ fbinary + '\n'; 

       consolidated_request += req; 
      }; 

     } 
} 

Gdy użytkownik kliknie Dodano:

$('upload').onclick = function(e){ 

    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", 'https://www.googleapis.com/batch', true); 
    xhr.setRequestHeader("Authorization", tok); 
    xhr.setRequestHeader("Content-Type", "multipart/mixed;boundary=" + boundary); 
    xhr.send(consolidated_request); 
}; 

Oto próbka POST (wygenerowane przy użyciu programu Firebug):

Header:

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Authorization Bearer ya29.AHES6ZQgu6gFurD6y7Bo2Mao1RNCFwyqNZcwvgDZ82RXIbQ4 
Content-Length 159866 
Content-Type multipart/mixed; charset=UTF-8;boundary=---======= foo_bar_baz12034245623562346 === 
Host www.googleapis.com 

Ciało:

--======= foo_bar_baz12034245623562346 === 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

POST https://www.googleapis.com/upload/storage/v1beta2/b/<mybucket>/o?uploadType=media&name=myimage.jpg HTTP/1.1 
Content-Type: image/jpeg 
Content-Length: 69436 
Authorization: Bearer ya29.AHES6ZQgu6gFurD6y7Bo2Mao1RNCFwyqNZcwvgDZ82RXIbQ4 

ÿØÿà�JFIF���d�d��ÿì�Ducky�����<��ÿî�Adobe�dÀ���ÿÛ�� 
... 

Problem polega na tym, że nie ma odpowiedzi, ponieważ otrzymuję 400 nieprawidłowych komunikatów o żądaniach. Co jest nie tak z tą prośbą?

Odpowiedz

1

możliwość wysyłania żądania POST as -

POST https://www.googleapis.com/upload/storage/v1beta2/b/<mybucket>/o?uploadType=media&name=myimage.jpg HTTP/1.1 

Zgodnie upload objects with POST request -

Aby przesłać mediów, użyć specjalnego identyfikatora URI. metody POST wspierać przesłane multimedialne mają dwa punkty końcowe URI:

  1. Przełącznik/przesłać URI, dla mediów. Format punktu końcowego przesyłania jest standardowym identyfikatorem URI zasobu z prefiksem "/ upload". Użyj tego identyfikatora URI podczas przesyłania samych danych multimedialnych. Przykład: POST /upload/storage/v1beta2/b/myBucket/o.
  2. Standardowy identyfikator zasobu URI dla metadanych. Jeśli zasób zawiera jakiekolwiek pola danych, te pola są używane do przechowywania metadanych opisujących przesłany plik. Tego identyfikatora URI można użyć podczas tworzenia lub aktualizowania wartości metadanych. Przykład: POST/storage/v1beta2/b/myBucket/o.

Więc trzeba wysłać żądanie POST as -

POST /upload/storage/v1beta2/b/myBucket/o?uploadType=media&name=myimage.jpg HTTP/1.1

Spróbuj wysłać żądanie POST pomijając prefiks https://www.googleapis.com z URL.

Dzięki

Neelam Sharma

Powiązane problemy