2012-07-26 111 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; 

};

相關問題