2016-03-24 19 views
5

Ich versuche, die Datei mit Google Drive API, die Datei ist standardmäßig nicht shareable ich möchte es freigegeben zu machen.Wie man die Datei mit google drive api teilen kann

Hier ist mein 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'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); 
          }); 
       }); 

         } 
        } 

ich die folgende Antwort bin immer: -

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

Hier will ich "shared" ändern: true Statt "shared" : falsch

Wie kann ich seine Erlaubnis ändern?

Irgendeine Idee?

Dank

Antwort

3

@arun Sie möchten mehr über Permission resource in Drive API lesen. Für "shared" zu true, jede Datei muss eine , type und email address or domain angeben. Als Eigentümer der Datei (Dokumente, Tabellen usw.) müssen Sie die entsprechende Berechtigung angeben, auf die festgelegt werden soll. Hier

ist ein Beispiel, mit der Permissions.create (Ich empfehle, mit Drive API v3)

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

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

Antwort vom Antrieb 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 
} 

Wenn Sie jedoch nicht in der Lage sind zu dem Laufwerk v3 wechseln , können Sie immer noch die Permission.insert von Drive v2 verwenden, um die Aufgabe zu erledigen. Hoffe das hilfreich und viel Glück!

+0

ich dies bereits getan, aber es ist nicht für mich arbeiten .... Es ist immer wieder "geteilt": falsch. Ich versuche diesen Link https://developers.google.com/drive/v3/reference/permissions/create#try-it und gebe ihm die Erlaubnis entsprechend deiner Antwort, aber es funktioniert nicht. –

+0

@arun können Sie ein wenig mehr Informationen darüber geben, was Sie damit gemeint haben, indem Sie "shared" auf "true" setzen? Die "Shared" -Eigenschaft ist nicht * schreibbar *, so dass Sie den Wert nicht ändern können. Eine zusätzliche Frage, sind Sie ein Besitzer dieser spezifischen Datei? – Andres

+0

Wie kann ich den Wert von "YOUR_API_KEY" bekommen, ist es das Token für die Autorisierung? – Jacky

0

Mit der Antwort unter dieser Frage hat es für mich: make folder shared google drive api v3?

ich es auf ‚Datei‘ und nicht als Ordner angelegt, machte den Typen ‚jedermann‘ und die Rolle ‚Leser‘ - scheint das äquivalent zu sein die Datei wird freigegeben.

1

Das Problem war, dass ich die Google Drive-API nicht in meiner Google-Entwicklerkonsole aktiviert habe und die Client-Bibliothek nicht geladen habe, damit gapi.client.request() ordnungsgemäß mit Google Picker funktioniert.

Im Folgenden finden Sie ein Beispiel, in dem ein Benutzer auf die Schaltfläche "Teilen" klickt, Berechtigungen für Google Drive autorisiert, mehrere Bilder oder Videos aus dem Picker-Modus auswählt und die Hyperlinks der Datei mit "Jeder mit dem Hyperlink kann angezeigt werden 'Berechtigungen.

Voraussetzungen:

  • Setup your credentials in der Google-Entwicklerkonsole
    • Ihre Entwickler-ID, Client-ID erhalten, und App-ID
  • aktiviert sowohl die Picker and Drive APIs in dem Entwickler Konsole

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

Dann wird die Taste alles im HTML zu nennen:

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