2016-03-24 20 views
5

Próbuję uzyskać plik przy użyciu apletu google drive, domyślnie plik nie jest udostępniany, chcę go udostępnić.Jak udostępnić plik za pomocą google drive api

Oto mój kod: -

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

         } 
        } 

otrzymuję następującą odpowiedź: -

{ 
"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" 
] 
} 

Tutaj chcę zmienić "wspólny": true Zamiast "shared" : false

Jak mogę zmienić jego uprawnienia?

Każdy pomysł?

Dzięki

Odpowiedz

3

@arun może chcesz dowiedzieć się więcej o Permission resource w napędzie API. Aby "udostępnione" być true, każde pozwolenie na plik musi określać: , . Jako właściciel pliku (Dokumenty, Arkusze itp.) Musisz podać odpowiednie uprawnienie do ustawienia.

Oto przykład, używając Permissions.create (I zalecamy stosowanie Drive API v3)

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

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

odpowiedź z napędu 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 
} 

Jeżeli jednak nie jesteś w stanie przejść do v3 Dysk , nadal możesz korzystać z Permission.insert z Dysku v2, aby wykonać zadanie. Mam nadzieję, że to pomocne i powodzenia!

+0

ja już zrobione, ale jej nie działa dla mnie .... Jego zawsze zwraca "shared": false. Próbuję tego linku https://developers.google.com/drive/v3/reference/permissions/create#try-it i udzielam pozwolenia zgodnie z Twoją odpowiedzią, ale nie działa. –

+0

@arun Czy możesz podać nieco więcej informacji na temat tego, co masz na myśli, zmieniając "shared" na true? właściwość "Shared" nie jest * zapisywalna *, więc nie będzie można po prostu zmodyfikować wartości. Jedno dodatkowe pytanie, czy jesteś właścicielem tego konkretnego pliku? – Andres

+0

Jak mogę uzyskać wartość "YOUR_API_KEY", czy jest tokenem do autoryzacji? – Jacky

0

Korzystanie odpowiedź pod tym pytaniem to zrobił dla mnie: make folder shared google drive api v3?

zastosowałem go do „plik” zamiast folderu, wykonany typu „ktoś” i rola „czytelnik” - wydaje się być odpowiednikiem udostępnianie pliku.

1

Problem polegał na tym, że nie włączałem interfejsu API Dysku Google w mojej konsoli programisty Google i nie załadowałem biblioteki "klienta", aby luka.client.request() działała poprawnie z Próbnikiem Google.

Poniżej znajduje się działający przykład, w którym użytkownik może kliknąć przycisk "Udostępnij", autoryzować uprawnienia na swoim Dysku Google, wybrać wiele obrazów lub filmów z modulatora wyboru i zwrócić hiperłącza do pliku, klikając "każdy z hiperłączem może wyświetlać "uprawnienia.

Wymagania:

  • Setup your credentials w konsoli programisty Google
    • Uzyskanie identyfikatora programisty, identyfikator klienta, a identyfikator aplikacji
  • Włącz zarówno Picker i napędów API w wywoływaczu konsola

kod 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>

następnie przycisk, aby wywołać wszystko w HTML:

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

Powiązane problemy