我对你的问题的理解如下。
- 您想让用户将文件上传到特殊帐户的 Google Drive。
- 您想将凭据放在服务器端。
如果我的理解是正确的,那么使用 Web Apps 怎么样? Web Apps 由 Google Apps 脚本作为服务器运行。我认为您可以通过使用它来实现您的情况。部署 Web 应用有以下 2 种模式。
模式一:
部署为“我”到“执行应用程序为:”和“任何人”到“谁有权访问应用程序:”。
- 在此模式中,Web 应用程序的脚本作为帐户所有者运行。因此,在部署 Web 应用程序时,已经完成了上传授权。凭据位于服务器端。
- 要求用户使用自己的访问令牌。此访问令牌用于访问 Web 应用程序。
- Web Apps 的脚本需要与用户共享。
我认为这种模式为上传提供了高安全性。但这样做是为了给用户带来任何负担。
模式2:
部署为“我”到“执行应用程序为:”和“任何人,甚至匿名”到“谁有权访问应用程序:”。
- 在此模式中,Web 应用程序的脚本作为帐户所有者运行。因此,在部署 Web 应用程序时,已经完成了上传授权。凭据位于服务器端。
- 用户无需访问令牌即可上传文件。
- Web Apps 的脚本也不需要与用户共享。
我认为在这种模式下,用户不需要使用访问令牌。例如,您可以将上传的密码设置为查询参数。而且这种模式可以在不给用户造成任何负担的情况下完成。
注意:
参考资料:
如果我误解了你的问题,我很抱歉。
编辑:
此流程假设您可以使用 Google Apps 脚本并部署 Web 应用程序。它还假设 Web 应用程序部署为模式 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的URL。
<!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>
参考: