How to make a file accessible using google drive api

I am trying to get a file using google drive api, by default the file is not available for sharing. I want to make it available.

Here is my code: -

<script type="text/javascript" src="https://apis.google.com/js/api.js"></script> <script src="https://apis.google.com/js/client.js"></script> // The Browser API key obtained from the Google Developers Console. // Replace with your own Browser API key, or your own key. var developerKey = 'XXXXXXXXXX_ff_NX66eb-XXXXXXXXXXX'; // The Client ID obtained from the Google Developers Console. Replace with your own Client ID. var clientId = "XXXXXXXXXX-hs4ujaro5sc3d0g8qndtcq2tl279cfm1.apps.googleusercontent.com" // Replace with your own App ID. (Its the first number in your Client ID) var appId = "XXXXXXXXXX"; // Scope to use to access user Drive items. var scope = ['https://www.googleapis.com/auth/drive']; var pickerApiLoaded = false; var oauthToken; $scope.addGoogleDriveFile = function() { gapi.load('auth', {'callback': onAuthApiLoad}); gapi.load('picker', {'callback': onPickerApiLoad}); gapi.client.setApiKey(developerKey); } function onAuthApiLoad() { window.gapi.auth.authorize( { 'client_id': clientId, 'scope': scope, 'immediate': false }, handleAuthResult); } function onPickerApiLoad() { pickerApiLoaded = true; createPicker(); } function handleAuthResult(authResult) { if (authResult && !authResult.error) { oauthToken = authResult.access_token; createPicker(); } } // Create and render a Picker object for searching images. function createPicker() { if (pickerApiLoaded && oauthToken) { var view = new google.picker.View(google.picker.ViewId.DOCS); var picker = new google.picker.PickerBuilder() .enableFeature(google.picker.Feature.NAV_HIDDEN) .setAppId(appId) .setOAuthToken(oauthToken) .addView(view) .addView(new google.picker.DocsUploadView()) .setDeveloperKey(developerKey) .setCallback(pickerCallback) .build(); picker.setVisible(true); } } // A simple callback implementation. function pickerCallback(data) { if (data.action == google.picker.Action.PICKED) { console.log(data); gapi.client.load('drive', 'v2').then(function() { var request = gapi.client.drive.files.get({ 'fileId': data.docs[0].id }); request.execute(function(resp) { console.log(resp); }); }); } } 

I get the following answer: -

 { "kind": "drive#file", "id": "0B2Tb9btqdPGHeDl2NU5mYXRIaGc", "etag": "\"rCKCAyesbPCaBxGt0eDJcEBQNUI/MTQ1ODgxNDU0MDg2NA\"", "selfLink": "https://www.googleapis.com/drive/v2/files/0B2Tb9btqdPGHeDl2NU5mYXRIaGc", "webContentLink": "https://docs.google.com/uc?id=0B2Tb9btqdPGHeDl2NU5mYXRIaGc&export=download", "alternateLink": "https://drive.google.com/file/d/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/view?usp=drivesdk", "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_12_pdf_list.png", "thumbnailLink": "https://lh6.googleusercontent.com/iriNEeCbpP3OfCxntpc7sK7Dok03tcBJ86X4Be_sFgLXXG1Ta8b2WOM6pF6sEpS8ytaMvA =s220", "title": "POTSS-2012.pdf", "mimeType": "application/pdf", "labels": { "starred": false, "hidden": false, "trashed": false, "restricted": false, "viewed": true }, "createdDate": "2016-03-24T09:57:00.978Z", "modifiedDate": "2016-03-24T10:15:40.864Z", "modifiedByMeDate": "2016-03-24T09:57:00.978Z", "lastViewedByMeDate": "2016-03-24T09:57:00.978Z", "markedViewedByMeDate": "1970-01-01T00:00:00.000Z", "version": "130", "parents": [ { "kind": "drive#parentReference", "id": "0AGTb9btqdPGHUk9PVA", "selfLink": "https://www.googleapis.com/drive/v2/files/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/parents/0AGTb9btqdPGHUk9PVA" , "parentLink": "https://www.googleapis.com/drive/v2/files/0AGTb9btqdPGHUk9PVA", "isRoot": true } ], "downloadUrl": "https://doc-0o-3g-docs.googleusercontent.com/docs/securesc/79n10ihd7kdei03rpq502qv5437nv33f /b6p7kupn55cuqeqq8l0d9vc1orf4bkiv/1458813600000/07489391032112366212/07489391032112366212/0B2Tb9btqdPGHeDl2NU5mYXRIaGc ?e=download&gd=true", "userPermission": { "kind": "drive#permission", "etag": "\"rCKCAyesbPCaBxGt0eDJcEBQNUI/QKpDIyepJ3z6YHq0L3ksgvrZLSo\"", "id": "me", "selfLink": "https://www.googleapis.com/drive/v2/files/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/permissions/me" , "role": "owner", "type": "user" }, "originalFilename": "POTSS-2012.pdf", "fileExtension": "pdf", "md5Checksum": "5b60cd94d0c0647c8828a60b8ce7efe4", "fileSize": "519097", "quotaBytesUsed": "519097", "ownerNames": [ "xxxxx IT" ], "owners": [ { "kind": "drive#user", "displayName": "xxxx IT", "isAuthenticatedUser": true, "permissionId": "07489391032112366212", "emailAddress": "it%xxxx .com@xxxxx.com " } ], "lastModifyingUserName": "xxxxx IT", "lastModifyingUser": { "kind": "drive#user", "displayName": "xxxx IT", "isAuthenticatedUser": true, "permissionId": "07489391032112366212", "emailAddress": "it% xxxx.com@xxxx.com " }, "editable": true, "copyable": true, "writersCanShare": true, "shared": false, "explicitlyTrashed": false, "appDataContents": false, "headRevisionId": "0B2Tb9btqdPGHT0pGV1FRRis0MmlJVmZsOE5uMU5UK2FNR0g0PQ", "spaces": [ "drive" ] } 

Here I want to change the "shared": true Instead of the "shared": false

How can I change its resolution?

Any idea?

thanks

+5
source share
4 answers

@arun, you can learn more about the permissions resource in the API driver. For "shared" true, each file permission must specify a role , type and email address or domain . As the owner of the file (Documents, Sheets, etc.), you need to provide the appropriate permission for the installation.

Here is an example using Permissions.create (I recommend using Drive API v3 )

 POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions?key={YOUR_API_KEY} { "role": "reader", "type": "user", "emailAddress": " xxxxxxxx@xxx.com " } 

Answer from the Files.get disk:

 GET https://www.googleapis.com/drive/v3/files/{fileId}?fields=appProperties%2CfileExtension%2Ckind%2CmimeType%2Cshared&key={YOUR_API_KEY} { "kind": "drive#file", "mimeType": "application/vnd.google-apps.document", "shared": true } 

However, if you cannot switch to v3, you can still use Permission.insert from v2 to complete the task. I hope this is useful and good luck!

+3
source

The fastest way to get a file’s preview is to add /preview at the end of the alternative link.

Like https://drive.google.com/file/d/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/preview

Then you can share this link with others.

Found here when I tested api requests on api disk.

+1
source

The problem I ran into was that I did not include the Google Drive APIs in the Google Developer Console, and I did not load the client library so that gapi.client.request () would work correctly with Google Picker.

The following is a working example of how a user can click the "Share" button, enable permission on his Google Drive, select several images or videos from the mode of choice and return file hyperlinks to "anyone who can view the hyperlink", permissions.

Prerequisites:

Javascript code:

 <script type="text/javascript"> // The API key obtained from the Google Developers Console. var developerKey = '#####'; // The Client ID obtained from the Google Developers Console. var clientId = "####" // App ID. (Its the first number in your Client ID) var appId = "####"; // Scope to use to access user Drive items. var scope = ['https://www.googleapis.com/auth/drive']; var pickerApiLoaded = false; var oauthToken; // Use the Google API Loader script to load the google.picker script. function onApiLoad() { gapi.load('auth', {'callback': onAuthApiLoad}); gapi.load('picker:client', {'callback': onPickerApiLoad}); } function onAuthApiLoad() { window.gapi.auth.authorize( { 'client_id': clientId, 'scope': scope, 'immediate': false }, handleAuthResult); } function onPickerApiLoad() { pickerApiLoaded = true; createPicker(); } function handleAuthResult(authResult) { if (authResult && !authResult.error) { oauthToken = authResult.access_token; createPicker(); } } // Create and render a Picker object function createPicker() { if (pickerApiLoaded && oauthToken) { var view1 = new google.picker.DocsView(google.picker.ViewId.DOCS_IMAGES_AND_VIDEOS) .setIncludeFolders(true) .setSelectFolderEnabled(true); var picker = new google.picker.PickerBuilder() .enableFeature(google.picker.Feature.MULTISELECT_ENABLED) .addView(view1) .setAppId(appId) .setOAuthToken(oauthToken) .setDeveloperKey(developerKey) .setCallback(pickerCallback) .build(); picker.setVisible(true); } } // A simple callback implementation. function pickerCallback(data) { var doc = ""; var fileID = ""; if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) { var gdurl = ""; var type = "anyone"; var role = "reader"; for(var i = 0; i < data[google.picker.Response.DOCUMENTS].length; i++){ doc = data[google.picker.Response.DOCUMENTS][i]; gdurl = gdurl + " " + doc[google.picker.Document.URL]; //change the file permissions to share with anyone with the link fileID = doc[google.picker.Document.ID]; var request1 = gapi.client.request({ 'path': '/drive/v3/files/' + fileID + '/permissions', 'method': 'POST', 'headers': { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + oauthToken }, 'body':{ 'role': role, 'type': type } }); request1.execute(function(resp) { console.log(resp); }); } // Form and display the message with hyperlinks included var message = 'Google Drive media link(s): ' + gdurl; alert('Success! Here are the hyperlinks for anyone to view: ' + message); } } </script> 

Then a button to call everything in HTML:

 <button onclick="onApiLoad()">Share via Google Drive</button> 
+1
source

Using the answer on this question, did it for me: make a folder with the general Google api v3 application?

I applied it to the “file”, and not to the folder, made the type “someone” and the “reader” of the role - it seems to be equivalent to sharing the file.

0
source

Source: https://habr.com/ru/post/1245694/


All Articles