将文件上传到常见的Google云端硬盘

时间:2016-05-19 05:19:11

标签: google-drive-api google-oauth

我有一个允许用户上传文件的网络应用。我专门为我的网络应用创建了一个Google帐户,例如mywebapp@gmail.com。我希望用户从我的网络应用上传的每个文件都保存到我的网络应用的谷歌硬盘中。 我使用以下方法将文件上传到谷歌驱动器,并完美地工作。但问题是,如果他有一个谷歌帐户,文件将保存到该人自己的谷歌驱动器。在代码中我可以说将文件上传到mywebapp@gmail.com帐户?

function uploadFile(evt) {
        alert('Hello');
         gapi.client.load('drive', 'v2', function() {
           insertFile();
         });
       }

       /**
        * Insert new file.
        */
       function insertFile() {
         const boundary = '-------314159265358979323846264';
         const delimiter = "\r\n--" + boundary + "\r\n";
         const close_delim = "\r\n--" + boundary + "--";
         var appState = {
           number: 12,
           text: 'hello'
         };
         var fileName = 'csusbdt-drive-example-app-state.txt';
         var contentType = 'application/json';
         var metadata = {
           'title': fileName,
           'mimeType': contentType
         };
         var base64Data = btoa(JSON.stringify(appState));
         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});
         request.execute(function(arg) {
           console.log(arg);
         });
       }

1 个答案:

答案 0 :(得分:0)

“我可以说代码在哪里上传文件到mywebapp@gmail.com帐户?”

它不起作用。在代码初始化的某个时刻,您请求了访问令牌。正是此访问令牌确定上传到哪个云端硬盘帐户。几乎所有的Google示例代码都显示了如何为当前用户的帐户获取访问令牌,所以我猜你已经复制了粘贴它。

您需要的是存储帐户的访问令牌。获得其中之一的最佳方法是首先获取一个刷新令牌,您可以将其安全地存储在服务器上,然后创建一个端点以返回存储刷新令牌的访问令牌。

...然而

您需要非常了解您尝试做的事情的安全隐患。 GDrive具有非常粗略的权限,这意味着任何具有允许插入的访问令牌的用户也可以删除或更改现有内容。

由于存在安全问题,我建议您考虑使用服务器GDrive代理来处理对GDrive的访问,并且只允许安全操作。