这个解决方法怎么样?不幸的是,Google API 上没有未经授权直接上传文件的 URL。所以我提出了一个解决方法。我认为这种方法可能很容易实现您想要做的事情。请将此视为几个答案之一。
我认为通过使用 Web Apps,您可以实现您想做的事情。此变通方法的流程如下。
流程:
1。示例脚本
- 创建一个独立的脚本。
- 您也可以在绑定脚本中执行此流程。这里使用了一个独立的脚本。
- 复制并粘贴以下示例脚本,然后保存。
请运行doGet(e)。这样,虽然发生错误,但可以完成授权过程。
function doGet(e) {
var blob = UrlFetchApp.fetch(e.parameters.url).getBlob();
var id = DriveApp.createFile(blob).getId();
return ContentService.createTextOutput(id);
}
2。部署 Web 应用程序。
- 在脚本编辑器的菜单栏中,选择发布 -> 部署为 Web 应用程序。
- 在“项目版本:”处,输入字符串。
- 在“将应用程序执行为:”中,选择“我”。
- 在“谁有权访问应用程序:”中,选择“任何人,甚至匿名”。
- 点击“部署”按钮。
- 请复制“当前网络应用 URL:”。 URL 是
https://script.google.com/macros/s/#####/exec。
- 点击“确定”。
3。从 URL 上传文件
- 查询参数为
url=http://example.com/file.doc。
- 您可以使用浏览器访问此 URL
https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc 来上传 file.doc。
- 在此示例脚本中,上传文件是在您的 Google Drive 的根文件夹中创建的。
注意:
- 关于 Web 应用,如果您更新脚本,请将 Web 应用重新部署为新版本。这样,更新的脚本就会得到反映。
- 这个示例脚本非常简单。因此,请根据您的环境进行修改。到时候,如果有什么问题,请随时告诉我。
-
在这种情况下,当用户使用 Web Apps URL 上传文件时,文件会上传到部署 Web Apps 的所有者的 Google Drive。因为脚本是作为唯一所有者运行的。
如果这对你没有用,我很抱歉。
编辑:
我了解到您想使用 php 和 javascript(我在这里使用 jQuery)从 URL 上传文件。如果我的理解有误,请告诉我。使用这些脚本需要doGet(e) 的 Google Apps 脚本。首先,请复制并粘贴doGet(e) 并部署Web Apps。对于这两个脚本,Google Drive 上创建的文件的文件 ID 作为响应返回。
通过php上传
<?php
$url = 'https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($curl);
echo $response;
curl_close($curl);
?>
通过 jQuery 上传
$.get("https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc", function(res) {
console.log(res);
});
参考资料:
编辑 2:
当您想让用户上传文件到自己的 Google Drive 时,请按照以下流程部署 Web Apps。
流程:
1。示例脚本
- 创建独立脚本。
- 您也可以在绑定脚本中执行此流程。这里使用了一个独立的脚本。
- 复制并粘贴以下示例脚本,然后保存。
请运行doGet(e)。这样,虽然发生错误,但可以完成授权过程。
function doGet(e) {
var blob = UrlFetchApp.fetch(e.parameters.url).getBlob();
var id = DriveApp.createFile(blob).getId();
return ContentService.createTextOutput(id);
}
2。部署 Web 应用程序。
- 在脚本编辑器的菜单栏中,选择发布 -> 部署为 Web 应用程序。
- 在“项目版本:”处,输入字符串。
- 在“将应用程序执行为:”中,选择“用户访问网络应用程序”。
- 在“谁有权访问应用程序:”中,选择“任何人”。
- 点击“部署”按钮。
- 请复制“当前网络应用 URL:”。 URL 是
https://script.google.com/macros/s/#####/exec。
- 点击“确定”。
3。从 URL 上传文件
- 查询参数为
url=http://example.com/file.doc。
- 您可以使用浏览器访问此 URL
https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc 来上传 file.doc。
- 在此示例脚本中,上传文件是在您的 Google Drive 的根文件夹中创建的。
- 当用户访问
https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc 的 URL 时,会显示 Google 的登录屏幕。
- 登录 Google 后,会显示授权屏幕。
- 通过授权,
file.doc被上传到用户的Google Drive。因为脚本是作为每个用户运行的。
注意:
- 请仅由一位用户部署 Web 应用程序。并且请在所有用户之间分享 Web Apps 的 URL。
- 在这种情况下,用户使用每个用户的浏览器,因为授权过程需要浏览器。
- 如果你用这个作为HTML,你可以把
https://script.google.com/macros/s/#####/exec?url=http://example.com/file.doc的URL作为链接。
- 关于 Web 应用,如果您更新脚本,请将 Web 应用重新部署为新版本。这样,更新的脚本就会得到反映。
编辑 3:
在使用Web Apps的情况下,使用<div class="google-upload" data-url="http://example.com/file.doc">时,示例脚本如下。
当用户点击Upload 时,file.doc 会上传到用户的云端硬盘。为了使用这个示例脚本,请使用上面的“编辑 2”部署 Web 应用程序检索到的 URL。
在这种情况下,登录屏幕会显示给每个用户。用户需要在登录后通过点击屏幕上的按钮授权使用 API。这是你想要的吗?
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.js"></script>
</head>
<body>
<div class="google-upload" data-url="http://example.com/file.doc">
<span style="background-color: #ddd">Upload</span>
</div>
<script>
$(function() {
$(".google-upload").click(function() {
var url = "https://script.google.com/macros/s/#####/exec"; // Please input the URL here.
var withQuery = url + "?url=";
window.open(withQuery + $('.google-upload').attr("data-url"), "_blank", "width=600,height=600,scrollbars=1");
});
});
</script>
</body>
</html>