2016-03-24 38 views
5

Sto cercando di ottenere il file utilizzando google drive api, per impostazione predefinita il file non è condivisibile e voglio renderlo condivisibile.Come rendere il file condivisibile utilizzando google drive api

Ecco il mio codice: -

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

         } 
        } 

sto ottenendo la seguente risposta: -

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

Qui voglio cambiare "condiviso": true Invece di "condivisa" : false

Come posso modificare la sua autorizzazione?

Qualche idea?

Grazie

risposta

3

@arun si consiglia di leggere di più su Permission resource in API Drive. Per "condiviso" per essere true, ogni autorizzazione file deve specificare un role, type e email address or domain. Come proprietario del file (Documenti, Fogli, ecc.), È necessario fornire l'autorizzazione appropriata per l'impostazione.

Ecco un esempio, utilizzando il Permissions.create (vi consiglio di usare Drive API v3)

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

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

risposta dall'azionamento 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 
} 

Tuttavia, se non si riesce a passare alla v3 unità , è comunque possibile utilizzare Permission.insert da Drive v2 per eseguire il lavoro. Spero che questo utile e buona fortuna!

+0

ho già fatto questo, ma non il suo lavoro per me .... Torna sempre "condiviso": falso. Provo questo link https://developers.google.com/drive/v3/reference/permissions/create#try-it e gli do il permesso in base alla tua risposta ma non funziona. –

+0

@arun puoi fornire un po 'più di informazioni su cosa intendevi cambiando il "condiviso" con vero? la proprietà "Shared" non è * scrivibile *, quindi non sarà possibile modificare solo il valore. Una domanda aggiuntiva, sei un proprietario di quel file specifico? – Andres

+0

come posso ottenere il valore di "YOUR_API_KEY", è il token per l'autorizzazione? – Jacky

0

Utilizzando la risposta in questa domanda ha fatto per me: make folder shared google drive api v3?

ho applicato a 'file', piuttosto che cartelle, fatto il tipo di 'chi' e il ruolo 'reader' - sembra essere l'equivalente di rendendo il file condiviso.

1

Il problema riscontrato era che non ho abilitato l'API di Google Drive nella mia console per sviluppatori Google e non ho caricato la libreria "client" in modo che gapi.client.request() funzioni correttamente con Google Picker.

Di seguito è riportato un esempio operativo per un utente che fa clic su un pulsante "Condividi", autorizza l'autorizzazione al proprio Google Drive, seleziona più immagini o video dal modal Picker e restituisce i collegamenti ipertestuali del file con "chiunque con il collegamento ipertestuale può visualizzare 'permessi.

Prerequisiti:

  • Setup your credentials nella console sviluppatore di Google
    • ottenere il tuo ID sviluppatore, ID client e ID applicazione
  • Attivare sia le Picker e Drive API nello sviluppatore console

Il codice 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>

Poi il pulsante per chiamare tutto in HTML:

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

Problemi correlati