2012-07-26 108 views

回答

19

您可以使用Permissions订阅源设置文件的访问控制列表。该文件位于:

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

为了使文件公开你需要将角色reader分配给类型anyone

然后,如果你想有一个链接分享给别人,你可以抓住API中File元数据返回的webContentLink URL,它将允许任何用户下载该文件。您也可以使用它将共享文件嵌入到HTML中(例如<img>标记中的图像)。

+1

使用权限使文件公开时,还需要将文档中描述的“值”设置为“实体的电子邮件地址或域名”。当您希望使用'webContentLink'公开文件并且您不想要求用户登录到Google Drive时,应该'有什么价值'? – user1501783 2012-07-31 20:49:30

+1

该值可以是一个空字符串:'' – Nivco 2012-08-06 17:58:53

+0

答案是正确的,但是当您抓取共享链接时,最好使用类似“https://drive.google.com/open?id={您的ID”的方式。这是因为如果共享项目是一个目录,则“WebContentLink”将为空。 Morover,'WebContentLink'给出了一个直接的下载链接,对此,没有在线预览可用。 – 2016-12-29 13:44:45

3

我认为这将很好地显示基于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; 

};

相关问题