2016-03-24 5 views
5

Я пытаюсь получить файл с помощью google drive api, по умолчанию файл не доступен для совместного использования. Я хочу сделать его доступным.Как сделать файл доступным с помощью google drive api

Вот мой код: -

<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's 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); 
          }); 
       }); 

         } 
        } 

Я получаю следующий ответ: -

{ 
"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 [email protected]" 
    } 
], 
"lastModifyingUserName": "xxxxx IT", 
"lastModifyingUser": { 
    "kind": "drive#user", 
    "displayName": "xxxx IT", 
    "isAuthenticatedUser": true, 
    "permissionId": "07489391032112366212", 
    "emailAddress": "it%[email protected]" 
}, 
"editable": true, 
"copyable": true, 
"writersCanShare": true, 
"shared": false, 
"explicitlyTrashed": false, 
"appDataContents": false, 
"headRevisionId": "0B2Tb9btqdPGHT0pGV1FRRis0MmlJVmZsOE5uMU5UK2FNR0g0PQ", 
"spaces": [ 
    "drive" 
] 
} 

Здесь я хочу изменить "общий": правда Вместо "общий" : false

Как я могу изменить свое разрешение?

Любая идея?

Благодаря

ответ

3

@arun вы можете прочитать больше о Permission resource в Drive API. Для «общий» должен быть true, для каждого разрешения файла необходимо указать role, type и email address or domain. Как владелец файла (Документы, Таблицы и т. Д.), Вам необходимо предоставить соответствующее разрешение для установки.

Вот пример, используя Permissions.create (я рекомендую использовать Drive API v3)

POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions?key={YOUR_API_KEY} 

{ 
"role": "reader", 
"type": "user", 
"emailAddress": "[email protected]" 
} 

ответ от привода Files.get:

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 
} 

Однако, если вы не можете переключиться на v3 Drive , вы все равно можете использовать Permission.insert с диска v2 для выполнения задания. Надеюсь, это полезно и удачи!

+0

Я уже сделал это, но он не работает для меня .... Его всегда возвращает «shared»: false. Я пробую эту ссылку https://developers.google.com/drive/v3/reference/permissions/create#try-it и даю ей разрешение в соответствии с вашим ответом, но оно не работает. –

+0

@arun вы можете предоставить немного больше информации о том, что вы имели в виду, изменив «общий» на true? свойство «Shared» не является * записываемым *, поэтому вы не сможете просто изменить значение. Еще один вопрос, являетесь ли вы владельцем этого конкретного файла? – Andres

+0

Как я могу получить значение «YOUR_API_KEY», это токен для авторизации? – Jacky

1

Самый быстрый способ получить предварительный просмотр файла - добавить /preview в конце альтернативной ссылки.

Подобно https://drive.google.com/file/d/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/preview

Вы можете поделиться этой ссылкой с другими.

Обнаружил это here, когда я тестировал api-запросы на диске api.

0

Используя ответ под этим вопросом сделал это для меня: make folder shared google drive api v3?

Я применил его к «файлу», а не папка, сделал тип «никому» и роль «читатель» - кажется, что эквивалентно что делает файл общим.

1

Проблема, с которой я столкнулся, не включала API Google Диска в моей консоли разработчика Google, и я не загружал библиотеку «клиент», чтобы функция gapi.client.request() работала правильно с Google Picker.

Ниже приведен рабочий пример того, как пользователь может щелкнуть кнопку «Поделиться», разрешить разрешение на их Google Диск, выбрать несколько изображений или видео из мода выбора и вернуть гиперссылки файлов «любому, у кого есть гиперссылка» 'разрешения.

Предпосылки:

  • Setup your credentials в консоли разработчика Google
    • Получить идентификатор разработчика, идентификатор клиента и идентификатор приложения
  • Включить оба Picker и Drive API, в разработчика пульт

Код JavaScript код:

<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's 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>

Тогда кнопка вызова все в HTML:

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

Смежные вопросы