È possibile condividere un file pubblicamente tramite Google Drive API
-
11-12-2019 - |
Domanda
Sto lavorando su Google drive application
che consentirà all'utente di creare un file che deve essere pubblico.
Ho potuto vedere un esempio in cui possiamo creare un file in Google Drive tramite API.
ma,
Durante la creazione di un file, è possibile condividere un file come public
.
Soluzione
È possibile impostare l'elenco di controllo dell'accesso del file utilizzando il feed Autorizza.La documentazione si trova qui:
https://developers.google.com/Drive/v2/reference/permissions
. Per creare un file pubblico dovrai assegnare il ruolo reader
al tipo anyone
Quindi, se si desidera un collegamento da condividere alle persone, è possibile afferrare 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>
).
Altri suggerimenti
Penso che sarebbe bello mostrare l'esempio del codice in base alla risposta che fornita da Nivco.Usando JavaScript puoi farlo in quel 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;
.
};