是否可以通过Google Drive API公开共享文件
问题描述:
我正在致力于Google drive application
这将允许用户创建必须公开的文件。是否可以通过Google Drive API公开共享文件
我可以看到一些例子,我们可以通过API在Google驱动器中创建一个文件。
但是, 在创建文件时,是否可以共享文件为public
。
答
您可以使用Permissions订阅源设置文件的访问控制列表。该文件位于:
https://developers.google.com/drive/v2/reference/permissions
为了使文件公开你需要将角色reader
分配给类型anyone
然后,如果你想有一个链接分享给别人,你可以抓住API中File元数据返回的webContentLink
URL,它将允许任何用户下载该文件。您也可以使用它将共享文件嵌入到HTML中(例如<img>
标记中的图像)。
答
我认为这将很好地显示基于Nivco提供的答案的代码示例。使用Javascript,你可以这样做:
var google = require('googleapis');
var _ = require('lodash-node/compat');
var Q = require('q');
var OAuth2 = google.auth.OAuth2;
var CLIENT_ID = '...';
var CLIENT_SECRET = '...';
var REDIRECT_URL = '...';
var shareFile = function (fileName) {
var deferred = Q.defer();
var drive = google.drive('v2');
var auth = new OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
drive.files.list({auth: auth}, function (err, res) {
var foundFile = _.first(_.filter(res.items, {title: fileName, "explicitlyTrashed": false}));
if (!foundFile) {
deferred.reject('File ' + fileName + ' has not been found.');
return;
}
drive.permissions.list({fileId: foundFile.id, auth: auth}, function (err, res) {
if (_.isEmpty(_.find(res.items, 'role', 'reader'))) {
var body = {
'value': 'default',
'type': 'anyone',
'role': 'reader'
};
drive.permissions.insert({
fileId: foundFile.id,
resource: body,
auth: auth
}, function (err, res, body) {
deferred.resolve(body);
});
}
});
});
return deferred.promise;
};
使用权限使文件公开时,还需要将文档中描述的“值”设置为“实体的电子邮件地址或域名”。当您希望使用'webContentLink'公开文件并且您不想要求用户登录到Google Drive时,应该'有什么价值'? – user1501783 2012-07-31 20:49:30
该值可以是一个空字符串:'' – Nivco 2012-08-06 17:58:53
答案是正确的,但是当您抓取共享链接时,最好使用类似“https://drive.google.com/open?id={您的ID”的方式。这是因为如果共享项目是一个目录,则“WebContentLink”将为空。 Morover,'WebContentLink'给出了一个直接的下载链接,对此,没有在线预览可用。 – 2016-12-29 13:44:45