¿Es posible compartir un archivo públicamente a través de la API de Google Drive?
-
11-12-2019 - |
Pregunta
Estoy trabajando en Google drive application
, lo que permitirá al usuario crear un archivo que debe ser público.
Podría ver algunos ejemplos en los que podemos crear un archivo en Google Drive a través de API.
pero,
Mientras crea un archivo, es posible compartir un archivo como public
.
Solución
Puede configurar la lista de control de acceso del archivo con el feed de permisos.La documentación se encuentra aquí:
https://developers.google.com/dive/v2/reference/permissions
Para hacer un archivo público, deberá asignar el rol GreenacodiCetAnGode al tipo reader
Entonces, si desea un enlace para compartir con las personas, puede agarrar la URL de anyone
devuelta en los metadatos del archivo en la API, permitirá a los usuarios descargar el archivo.También puede usarlo para incrustar el archivo compartido en HTML (por ejemplo, imágenes en las etiquetas GeneracDicetAtCode).
Otros consejos
Creo que sería bueno mostrar el ejemplo del código basado en la respuesta que proporcionó NIVCO.Usando JavaScript puedes hacerlo así:
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;
};