如何在Google Drive API中执行功能

时间:2015-04-15 21:22:32

标签: javascript google-drive-api

我有一个非常通用的Google Drive API,允许我从浏览器上传文件到我的Google驱动器,但我希望能够在所选文件夹中返回我的文件数组。

我已经创建了一个选择器和一个方法.addView(google.picker.ViewId.FOLDERS),它显示了我的所有Google云端硬盘文件夹,但它只允许我选择一个文件,即我需要使用Google Drive API来返回所有文件一个文件夹,而不是一个选择器(https://groups.google.com/forum/#!topic/Google-Picker-API/iOak9NsbBpE)。

我有这个功能,它实现了我正在寻找的功能:

       function retrieveAllFilesInFolder(folderId, callback) {
          var retrievePageOfChildren = function(request, result) {
            request.execute(function(resp) {
              result = result.concat(resp.items);
              var nextPageToken = resp.nextPageToken;
              if (nextPageToken) {
                request = gapi.client.drive.children.list({
                  'folderId' : folderId,
                  'pageToken': nextPageToken
                });
                retrievePageOfChildren(request, result);
              } else {
                callback(result);
              }
            });
          }
          var initialRequest = gapi.client.drive.children.list({
              'folderId' : folderId
            });
          retrievePageOfChildren(initialRequest, []);
        }

但是如何让我在我已经安装的Google Drive API中运行它?

 var CLIENT_ID = '1052173400541-ohauk7vubfq0u4tdt4in1bqlbko87ru9.apps.googleusercontent.com';
  var SCOPES = 'https://www.googleapis.com/auth/drive';

  /**
   * Called when the client library is loaded to start the auth flow.
   */
  function handleClientLoad() {
    window.setTimeout(checkAuth, 1);
  }

  /**
   * Check if the current user has authorized the application.
   */
  function checkAuth() {
    gapi.auth.authorize(
        {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true},
        handleAuthResult);
  }

  /**
   * Called when authorization server replies.
   *
   * @param {Object} authResult Authorization result.
   */
  function handleAuthResult(authResult) {
    var authButton = document.getElementById('authorizeButton');
    var filePicker = document.getElementById('filePicker');
    authButton.style.display = 'none';
    filePicker.style.display = 'none';
    if (authResult && !authResult.error) {
      // Access token has been successfully retrieved, requests can be sent to the API.
      filePicker.style.display = 'block';
      filePicker.onchange = uploadFile;
    } else {
      // No access token could be retrieved, show the button to start the authorization flow.
      authButton.style.display = 'block';
      authButton.onclick = function() {
          gapi.auth.authorize(
              {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': false},
              handleAuthResult);
      };
    }
  }

  /**
   * Start the file upload.
   *
   * @param {Object} evt Arguments from the file selector.
   */
  function uploadFile(evt) {
    gapi.client.load('drive', 'v2', function() {
      var file = evt.target.files[0];
      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 :(得分:-1)

有关如何显示使用驱动器范围配置的初始权限对话框,请参阅gapi的文档。这样就完成了oauth2流程并为您提供了一个访问令牌,您可以在显示它之前在选择器中设置它。一旦获得文件夹ID,请调用您显示列出文件的gapi函数。那个桥上的Gapi已经过验证了。您已经拥有所有代码除了您设置范围的部分并启动auth和permiasion fllow。