Tenemos la contestación a este apuro, o por lo menos eso creemos. Si presentas dudas compártelo en un comentario y sin dudarlo te ayudaremos
Solución:
Basado en esta documentación, si está utilizando alt=media
debe realizar una solicitud HTTP GET autorizada al archivo resource URL
e incluir el parámetro de consulta alt=media
.
GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media
Authorization: Bearer ya29.AHESVbXTUv5mHMo3RYfmS1YJonjzzdTOFZwvyOAUVhrs
Consulte aquí los ejemplos de cómo realizar una descarga de archivos con nuestras bibliotecas cliente de Drive API.
String fileId = "0BwwA4oUTeiV1UVNwOHItT0xfa2M";
OutputStream outputStream = new ByteArrayOutputStream();
driveService.files().get(fileId)
.executeMediaAndDownloadTo(outputStream);
por el error (403) Permiso insuficientetal vez este sea un problema con su token de acceso, no con la configuración de su proyecto.
El error de permisos insuficientes se devuelve cuando no ha solicitado los ámbitos que necesita cuando recuperó su token de acceso. Puede comprobar qué ámbitos ha solicitado pasando su access_token a este punto final: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ACCESS_TOKEN
Revisa estos enlaces:
-
google plus api: error “permisos insuficientes”
-
Devoluciones de carga de Google Drive – (403) Permiso insuficiente
Recuerda que estás subiendo a la cuenta de google drive de las cuentas de servicio. Si desea poder verlo desde su propia cuenta de Google Drive, tendrá que hacer una inserción de los permisos. para darte acceso
¡Phu, estabas tan cerca!
Gracias por compartir su método de uso de webContentLink y webViewLink. Creo que es lo mejor para la mayoría de los propósitos. Pero en mi aplicación, no pude usar viewContentLink porque necesito poder ingresar la imagen en un lienzo, y la imagen que proporciona Google no está lista para CORS.
Así que aquí hay un método
var fileId = '';
var accessToken = gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().access_token;// or this: gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.googleapis.com/drive/v3/files/"+fileId+'?alt=media', true);
xhr.setRequestHeader('Authorization','Bearer '+accessToken);
xhr.responseType = 'arraybuffer'
xhr.onload = function()
//base64ArrayBuffer from https://gist.github.com/jonleighton/958841
var base64 = 'data:image/png;base64,' + base64ArrayBuffer(xhr.response);
//do something with the base64 image here
xhr.send();
Tenga en cuenta que configuré el tipo de respuesta en arraybuffer
y movido alt=media
hasta el xhr.open
llamar. También agarré una función que convierte el array búfer a base64 desde https://gist.github.com/jonleighton/958841.
Descubrí que en realidad puedo recuperar las URL de todos esos archivos de la carpeta usando archivos ‘ webViewLink
o webViewContent
attributes. Un archivo que sea del tipo Google Drive (Google Doc, Google Sheet, etc…) tendrá webViewLink
attribute y un archivo que no sea de tipo Google Drive tendrá webContentLink
. los webViewLink
abrirá el archivo en Google Drive y el webContentLink
descargará el archivo. Mi código:
var request = gapi.client.drive.files.list(
q:"'0Bz9_vPIAWUcSWWo0UHptQ005cnM' in parents", //folder ID
fields: "files(id, name, webContentLink, webViewLink)"
);
request.execute(function(resp)
console.log(resp); //access to files in this variable