Est-il possible de partager un fichier publiquement via l'API Google Drive
-
11-12-2019 - |
Question
je travaille sur Google drive application
ce qui permettra à l'utilisateur de créer un fichier qui doit être public.
J'ai pu voir un exemple où nous pouvons créer un fichier dans Google Drive via des API.
Mais, lors de la création d'un fichier, est-il possible de partager un fichier comme public
.
La solution
Vous pouvez définir la liste de contrôle d'accès du fichier à l'aide du flux d'autorisations.La documentation se trouve ici :
https://developers.google.com/drive/v2/reference/permissions
Pour rendre un fichier public, vous devrez attribuer le rôle reader
au type anyone
Ensuite, si vous souhaitez partager un lien avec des personnes, vous pouvez récupérer le webContentLink
URL renvoyée dans les métadonnées du fichier dans l'API, elle permettra à tous les utilisateurs de télécharger le fichier.Vous pouvez également l'utiliser pour intégrer le fichier partagé dans HTML (par exemple des images dans <img>
Mots clés) .
Autres conseils
Je pense que ce serait bien de montrer l'exemple de code basé sur la réponse fournie par Nivco.Utilisant JavaScript, vous pouvez le faire comme ça:
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;
};