【问题标题】:Is it possible to share a file publicly through Google Drive API是否可以通过 Google Drive API 公开共享文件
【发布时间】:2017-11-25 19:24:42
【问题描述】:

我正在处理Google drive application,这将允许用户创建必须公开的文件。

我可以看到一些示例,我们可以通过 API 在 Google 驱动器中创建文件。

但是, 创建文件时,是否可以将文件共享为public

【问题讨论】:

    标签: google-drive-api


    【解决方案1】:

    您可以使用权限提要设置文件的访问控制列表。文档位于此处:

    https://developers.google.com/drive/v2/reference/permissions

    要公开文件,您需要将角色 reader 分配给类型 anyone

    然后,如果您想将链接分享给人们,您可以在 API 中获取文件元数据中返回的webContentLink URL,它将允许任何用户下载该文件。您还可以使用它将共享文件嵌入到 HTML 中(例如 <img> 标签中的图像)。

    【讨论】:

    • 使用权限公开文件时,还需要设置“值”,文档中将其描述为“实体的电子邮件地址或域名”。当您希望使用“webContentLink”公开文件并且不想要求用户登录到 Google 云端硬盘时,“价值”应该是什么?
    • 值可以是空字符串:''
    • 答案是对的,但是当您获取共享链接时,最好使用https://drive.google.com/open?id={your ID} 之类的内容。这是因为如果共享项目是目录,WebContentLink 将为空。 Morover,WebContentLink 提供直接下载链接,不提供在线预览。
    【解决方案2】:

    我认为根据 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;
    

    };

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      相关资源
      最近更新 更多