使用javascript将服务器上的文件上传到谷歌驱动器

时间:2013-07-01 23:39:24

标签: javascript xmlhttprequest google-drive-api

我想允许我网站的用户上传他们创建的存储在我的服务器上的文件,以便上传到Google云端硬盘帐户。

我尝试过身份验证并将此accessstoken传递给.net,但无法使该流程正常工作。 Using existing access token for google drive request in .net

所以现在我需要通过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);
    }
  }

1 个答案:

答案 0 :(得分:0)

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