هل من الممكن مشاركة ملف بشكل عام من خلال Google Drive API
-
11-12-2019 - |
سؤال
اعمل على ذلك Google drive application
والذي سيسمح للمستخدم بإنشاء ملف يجب أن يكون عامًا.
يمكنني رؤية بعض الأمثلة حيث يمكننا إنشاء ملف في Google Drive من خلال واجهات برمجة التطبيقات.
ولكن ، أثناء إنشاء ملف ، هل من الممكن مشاركة ملف كما public
.
المحلول
يمكنك تعيين قائمة التحكم في الوصول للملف باستخدام موجز الأذونات.الوثائق موجودة هنا:
https://developers.google.com/drive/v2/reference/permissions
لجعل الملف عامًا، ستحتاج إلى تعيين الدور reader
إلى النوع anyone
وبعد ذلك، إذا كنت تريد مشاركة الرابط مع الأشخاص، فيمكنك الحصول على webContentLink
تم إرجاع عنوان URL في البيانات الوصفية للملف في واجهة برمجة التطبيقات، وسيسمح لأي مستخدم بتنزيل الملف.يمكنك أيضًا استخدامه لتضمين الملف المشترك في HTML (على سبيل المثال الصور بتنسيق <img>
العلامات).
نصائح أخرى
أعتقد أنه سيكون من الجيد عرض مثال الكود بناءً على الإجابة التي قدمتها Nivco.باستخدام جافا سكريبت يمكنك القيام بذلك على النحو التالي:
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;
};