【发布时间】:2017-11-25 19:24:42
【问题描述】:
我正在处理Google drive application,这将允许用户创建必须公开的文件。
我可以看到一些示例,我们可以通过 API 在 Google 驱动器中创建文件。
但是,
创建文件时,是否可以将文件共享为public。
【问题讨论】:
标签: google-drive-api
我正在处理Google drive application,这将允许用户创建必须公开的文件。
我可以看到一些示例,我们可以通过 API 在 Google 驱动器中创建文件。
但是,
创建文件时,是否可以将文件共享为public。
【问题讨论】:
标签: google-drive-api
您可以使用权限提要设置文件的访问控制列表。文档位于此处:
https://developers.google.com/drive/v2/reference/permissions
要公开文件,您需要将角色 reader 分配给类型 anyone
然后,如果您想将链接分享给人们,您可以在 API 中获取文件元数据中返回的webContentLink URL,它将允许任何用户下载该文件。您还可以使用它将共享文件嵌入到 HTML 中(例如 <img> 标签中的图像)。
【讨论】:
https://drive.google.com/open?id={your ID} 之类的内容。这是因为如果共享项目是目录,WebContentLink 将为空。 Morover,WebContentLink 提供直接下载链接,不提供在线预览。
我认为根据 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;
};
【讨论】: