Saltar al contenido

Cómo usar la API de Google Drive para descargar archivos con Javascript

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=mediadebe 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 arraybuffery 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

Comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *