上传文件以使用API​​预设Google云端硬盘帐户?

时间:2018-05-07 00:57:31

标签: javascript file google-drive-api google-developers-console

我正在使用Google Drive API来访问和管理文件。但是,我希望将文件上传到预先设置的帐户,我在内部存储OAuth凭据。

因此,我目前不确定如何将文件上传到此帐户,而不会让文件通过我的服务器。有没有办法直接从客户端的计算机上传文件到Google云端硬盘帐户,而不会冒OAuth凭据或其他信息的风险?

2 个答案:

答案 0 :(得分:2)

我理解你的问题如下。

  • 您希望用户将文件上传到特殊帐户的Google云端硬盘。
  • 您希望将凭据放在服务器端。

如果我的理解是正确的,那么使用Web Apps怎么样? Web Apps由Google Apps脚本作为服务器运行。我认为你可以通过使用它来实现你的目标。有两种用于部署Web应用程序的模式。

模式1:

部署为"我"到"执行应用程序:"和"任何人" to"谁有权访问该应用:"。

  • 在此模式中,Web Apps脚本作为帐户所有者运行。因此,在部署Web应用程序时,已经完成了上载授权。凭据位于服务器端。
  • 用户需要使用自己的访问令牌。此访问令牌用于访问Web Apps。
  • 需要与用户共享Web Apps脚本。

我认为这种模式为上传提供了很高的安全性。但这样做会给用户带来负担。

模式2:

部署为"我"到"执行应用程序:"和"任何人,甚至匿名" to"谁有权访问该应用:"。

  • 在此模式中,Web Apps脚本作为帐户所有者运行。因此,在部署Web应用程序时,已经完成了上载授权。凭据位于服务器端。
  • 用户可以上传没有访问令牌的文件。
  • 此外,Web Apps脚本不需要与用户共享。

我认为在这种模式中,用户不需要使用访问令牌。例如,您可以将上载密码设置为查询参数。而且这种模式也可以在不给用户带来任何负担的情况下完成。

注意:

  • 如果您使用密码进行上传作为查询参数,我建议使用模式2。

参考文献:

如果我误解了你的问题,我很抱歉。

编辑:

此流程假设您可以使用Google Apps脚本并部署Web应用。此外,它还假设Web Apps部署为模式2.此示例脚本用于使用浏览器上载文件。当然,您可以使用本地PC上传其他语言的文件。请将此视为样本。

1.复制并粘贴GAS的示例脚本。

请将以下GAS脚本复制并粘贴到脚本编辑器中。

function doPost(e) {
  var data = Utilities.base64Decode(e.parameters.data);
  var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);
  DriveApp.createFile(blob);
  return ContentService.createTextOutput("Done.")
}
2.部署Web应用程序。

如上所述,请部署像模式2这样的Web应用程序。部署Web应用程序时,可以检索URL。这是终点。

3.从本地PC上传文件

您可以使用以下HTML上传文件。请在您的本地PC上使用它。当您使用此功能时,请将https://script.google.com/macros/s/#####/exec修改为检索到的Web Apps网址。

<!DOCTYPE html>
<html>

<head>
    <title>Sample script for uploading file to Google Drive without authorization</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.js"></script>
</head>

<body>
    <form action="https://script.google.com/macros/s/#####/exec" id="form" method="post">
        Upload a file
        <div id="data"></div>
        <input name="file" id="uploadfile" type="file">
        <input id="submit" type="submit">
    </form>
    <script>
    $('#uploadfile').on("change", function() {
        var file = this.files[0];
        var fr = new FileReader();
        fr.fileName = file.name;
        fr.onload = function(e) {
            e.target.result
            html = '<input type="hidden" name="data" value="' + e.target.result.replace(/^.*,/, '') + '" >';
            html += '<input type="hidden" name="mimetype" value="' + e.target.result.match(/^.*(?=;)/)[0] + '" >';
            html += '<input type="hidden" name="filename" value="' + e.target.fileName + '" >';
            $("#data").empty().append(html);
        }
        fr.readAsDataURL(file);
    });
    </script>
</body>

</html>

参考:

答案 1 :(得分:1)

如果您可以让客户端登录某种oauth驱动器api链接程序,您可以让客户端计算机将其上传到他们自己的驱动器帐户并将其与您的Google帐户共享。在您的服务器上,可能是检查驱动器的文件列表是否有更改,并创建任何新文件的副本。

然后,您的服务器可以托管某种类型的网页,其中包含其复制的所有文件的列表。客户端计算机将查看该网页,并从客户端计算机上删除它们上的文件,导致在客户端的驱动器帐户上不使用存储,并且您拥有自己的文件副本。 / p>