2012-07-26 25 views

Respuesta

19

Puede establecer la Lista de control de acceso del archivo utilizando la fuente de Permisos. La documentación se encuentra aquí:

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

para hacer público un archivo necesitará asignar el papel reader al tipo anyone

Entonces, si quieres un enlace para compartir con la gente, que puede tomar la URL webContentLink 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 <img>).

+1

Al hacer público un archivo con permisos, también debe establecer 'valor', que se describe en la documentación como "la dirección de correo electrónico o el nombre de dominio de la entidad". ¿Qué debería 'valorar' cuando quiere que el archivo esté disponible públicamente usando 'webContentLink' y no quiere que el usuario tenga que iniciar sesión en Google Drive? – user1501783

+1

El valor puede ser una cadena vacía: '' – Nivco

+0

La respuesta es correcta, pero cuando agarras el enlace para compartir, es mejor usar algo como 'https://drive.google.com/open?id={your ID}'. Esto se debe a que si el elemento compartido es un directorio, 'WebContentLink' estará vacío. Además, 'WebContentLink' ofrece un enlace de descarga directa, para el cual no habrá disponible una vista previa en línea. –

3

Creo que sería bueno mostrar el ejemplo de código basado en la respuesta proporcionada por 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; 

};

Cuestiones relacionadas