Javascript 通过js跟踪文件上传到谷歌云存储的进度?

Javascript 通过js跟踪文件上传到谷歌云存储的进度?,javascript,google-cloud-storage,Javascript,Google Cloud Storage,我想知道在使用javascript客户端时是否可以跟踪文件上传到google云存储的进度?因为我有一个进度条,我想向用户显示到目前为止上传了多少文件 我使用的上传代码与google在页面上提供的文件上传代码相同。我没有使用js库提供的gapi.client.requestapi,而是创建了一个XMLHttpRequest并为事件进度添加了一个事件侦听器。如下所示: const boundary = '-------314159265358979323846'; const

我想知道在使用javascript客户端时是否可以跟踪文件上传到google云存储的进度?因为我有一个进度条,我想向用户显示到目前为止上传了多少文件


我使用的上传代码与google在页面上提供的文件上传代码相同。

我没有使用js库提供的
gapi.client.request
api,而是创建了一个
XMLHttpRequest
并为事件
进度添加了一个事件侦听器。如下所示:

      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);
属性:大部分代码取自谷歌的js库,唯一添加的是用于监听上传进度的事件侦听器