2012-07-26 8 views

risposta

19

È possibile impostare l'elenco di controllo di accesso del file utilizzando il feed Autorizzazioni. La documentazione si trova qui:

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

Per creare un file pubblico sarà necessario assegnare il ruolo reader al tipo anyone

Quindi, se si desidera un link per condividerlo con la gente, è possibile prendi l'URL webContentLink restituito nei metadati del file nell'API, consentirà a tutti gli utenti di scaricare il file. Puoi anche usarlo per incorporare il file condiviso in HTML (ad esempio immagini nei tag <img>).

+1

Quando si pubblica un file utilizzando le autorizzazioni, è inoltre necessario impostare "valore", che è descritto nella documentazione come "l'indirizzo di posta elettronica o il nome di dominio per l'entità". Che cosa dovrebbe essere "value" quando desideri che il file sia pubblicamente disponibile utilizzando "webContentLink" e non desideri richiedere che l'utente effettui l'accesso a Google Drive? – user1501783

+1

Il valore può essere una stringa vuota: '' – Nivco

+0

La risposta è corretta ma quando si prende il collegamento di condivisione, è meglio usare qualcosa come 'https://drive.google.com/open?id={your ID}'. Questo perché se l'elemento condiviso è una directory, 'WebContentLink' sarà vuoto. Inoltre, 'WebContentLink' fornisce un collegamento per il download diretto, per il quale non è disponibile alcuna anteprima online. –

3

Penso che sarebbe bello mostrare l'esempio di codice basato sulla risposta fornita da Nivco. Usando Javascript puoi farlo in questo modo:

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; 

};

Problemi correlati