Track progress of file upload to google cloud storage via js?

后端 未结 1 747
广开言路
广开言路 2020-12-11 12:17

I\'m wondering if it is possible to track the progress of a file upload to google cloud storage when using the javascript client? As I have a progress bar that I would like

相关标签:
1条回答
  • 2020-12-11 12:43

    Instead of using the gapi.client.request api provided by the js library I instead created an XMLHttpRequest and appended a event listener for the event progress. As seen by the following:

          const boundary = '-------314159265358979323846';
          const delimiter = "\r\n--" + boundary + "\r\n";
          const close_delim = "\r\n--" + boundary + "--";
    
          var reader = new FileReader();
          reader.readAsBinaryString(fileData);
          reader.onload = function(e) {
            var contentType = fileData.type || 'application/octet-stream';
            var metadata = {
              'name': 'testing',
              'mimeType': contentType
            };
    
            var base64Data = btoa(reader.result);
            var multipartRequestBody =
              delimiter +
              'Content-Type: application/json\r\n\r\n' +
              JSON.stringify(metadata) +
              delimiter +
              'Content-Type: ' + contentType + '\r\n' +
              'Content-Transfer-Encoding: base64\r\n' +
              '\r\n' +
              base64Data +
              close_delim;
    
            gapi.client.request()
            var xhr = new XMLHttpRequest();
    
            xhr.open('POST', 'https://www.googleapis.com/upload/storage/v1/b/bucket/o?uploadType=multipart&key=apiKey&alt=json', true);
    
            xhr.setRequestHeader('Content-Type', 'multipart/mixed; boundary="' + boundary + '"');
            xhr.setRequestHeader('authorization', 'Bearer ' + gapi.auth.getToken().access_token);
    
            xhr.upload.addEventListener("progress", function(e) {
              var pc = parseFloat(e.loaded / e.total * 100).toFixed(2);
            }, false);
    
            xhr.onreadystatechange = function(e) {
              if (xhr.readyState == 4) {
                console.log(xhr.responseText);
              }
            };
    
            xhr.send(multipartRequestBody);
    

    Attribution: Majority of code was taken from Google's js library with the only addition being the event listener for listening to the progress of the upload.

    0 讨论(0)
提交回复
热议问题