0

我想让我的网站的用户能够上传他们创建的存储在我的服务器上的文件,以上传到那里的谷歌驱动器帐户。

我尝试进行身份验证并将此访问令牌传递给.net,但无法使该流程正常工作。 在 .net 中使用现有的访问令牌进行 google drive 请求

所以现在我需要帮助只用 javascript 来做这件事。如何在后台下载文件然后将其传递给 api?

如果可能,我想避免使用“保存到驱动器”按钮。

这是我当前的代码:

    gapi.client.load('drive', 'v2', function() {
      //How do i download a file and then pass it on.
      var file = 
      insertFile(file);
    });


  /**
   * Insert new file.
   *
   * @param {File} fileData File object to read data from.
   * @param {Function} callback Function to call when the request is complete.
   */
  function insertFile(fileData, callback) {
    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 = {
        'title': fileData.name,
        '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;

      var request = gapi.client.request({
          'path': '/upload/drive/v2/files',
          'method': 'POST',
          'params': {'uploadType': 'multipart'},
          'headers': {
            'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
          },
          'body': multipartRequestBody});
      if (!callback) {
        callback = function(file) {
          console.log(file)
        };
      }
      request.execute(callback);
    }
  }
4

1 回答 1

0

有许多使用 XMLHttpRequest 将文件从 GET 请求下载到二进制字符串的示例。例如,像这样一个。您可以将读取文件的部分替换reader.readAsBinaryString(fileData);为此代码的二进制字符串。

于 2013-07-02T07:02:37.593 回答