Como usar a API do Google Drive para baixar arquivos com Javascript
Quero baixar arquivos do google drive com a API javascript. Consegui autenticar e carregar a lista de arquivos usandogapi.client.drive.files
solicitação. No entanto, fiquei preso ao baixar esses arquivos.
Minha tentativa de baixar o arquivo:
var request = gapi.client.drive.files.get({
fileId:id,
alt:'media'
});
request.execute(function(resp){
console.log(resp);
});
Eu tenho esses erros ao tentar executar o acima:
(403) The user has not granted the app 336423653212 read access to the file 0B0UFTVo1BFVmeURrWnpDSloxQlE.
(400) Bad Request
Reconheço que os arquivos que não são do Google Drive (Google Doc, Google Slide) retornam o erro 403.
Eu sou novo nisso. Qualquer ajuda e resposta é realmente apreciada.
Atualização 0
Na documentação do Google Drive sobreTratamento de erro da API, aqui está parte da explicação para400 errors
Isso pode significar que um campo ou parâmetro necessário não foi fornecido, o valor fornecido é inválido ou a combinação de campos fornecidos é inválida.
Isso é porque eu tenhoalt:'media'
no meu objeto de parâmetro.
eu tenteigapi.client.drive.files.export
, mas também não funciona e retorna(403) Insufficient Permission
embora minha conta do Google Drive tenha permissão de edição para esses arquivos. Aqui está o meu código:
var request = gapi.client.drive.files.get({
fileId:element.id,
});
request.then(function(resp){
console.log(resp.result);
type = resp.result.mimeType;
id = resp.result.id;
var request = gapi.client.drive.files.export({
fileId:id,
mimeType:type
})
request.execute(function(resp){
console.log(resp);
});
});
Atualização 1
Baseado emresposta de abielita, Tentei fazer uma solicitação HTTP autorizada, mas ela não baixa o arquivo. Na verdade, ele retorna as informações do arquivo emresponse
eresponseText
atributo noXMLHttpRequest
objeto.
function test() {
var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.googleapis.com/drive/v3/files/"+'1A1RguZpYFLyO9qEs-EnnrpikIpzAbDcZs3Gcsc7Z4nE', true);
xhr.setRequestHeader('Authorization','Bearer '+accessToken);
xhr.onload = function(){
console.log(xhr);
}
xhr.send('alt=media');
}
______________________________________________________
Descobri que posso recuperar URLs de todos esses arquivos da pasta usando os arquivos 'webViewLink
ouwebViewContent
atributos.
Um arquivo do tipo Google Drive (Google Doc, Google Sheet, etc ...) teráwebViewLink
atributo. UMAwebViewLink
abrirá o arquivo no Google Drive.
Um arquivo que não seja do Google Drive teráwebContentLink
. UMAwebContentLink
fará o download do arquivo.
Meu 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);
}