GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO] Upload para o Google Drive com NodeJS

nodejs
javascript
Tags: #<Tag:0x00007fea98baff38> #<Tag:0x00007fea98baf920>

#1

Bom dia.

Estou desenvolvendo uma aplicação que precisa fazer uploads de arquivos para o Google Drive. Vi então que poderia usar o Google Drive API que tem uma vasta documentação.
Segui todos os passos para implementação com o NodeJS e consegui executar tudo normalmente, porém, quando vou enviar algum arquivo eu recebo um erro de código 401, que diz que é necessário fazer o login.
Alguém já teve este problema? Procurei várias soluções mas nenhuma me atendeu.
Agradeço se alguém puder me auxiliar.
Segue abaixo o código que utilizo para upload:

        let config = require('../../drive-config')();
        let fs = require('fs');
        let google = require('googleapis');
        let drive = google.drive('v3');

        let media = {
            mimeType: 'image/*, text/*, application/*',
            body: fs.createReadStream("./uploads/" + req.file.filename)
        };

        drive.files.create({
            resource: req.file,
            media: media,
            fields: 'id'
        }, (err, file) => {
            if (err) {
              console.error("Error in drive.files.create: " + err);
              res.status(500).json(err); 
            } else {
              console.log('File Id: ', file.id);
              res.status(200).send();
            }
        });

#2

SOLUÇÃO:

Utilizei o código base da documentação da API e troquei o listFiles pelo seguinte método
Link API (https://developers.google.com/drive/v3/web/quickstart/nodejs)

_saveFile(auth, self) {  // self é o contexto da classe enviado no callback
        let drive = google.drive({ version: 'v3', auth: auth });

        drive.files.create({
            resource: {
                name: self._file.filename,
                mimeType: path.extname(self._file.originalname)
            },
            media: {
                mimeType: '*/*',
                body: fs.createReadStream("./uploads/" + self._file.filename)
            },
            fields: 'id'
        }, (err, file) => {
            if (err) {
                console.error("Error in drive.files.create: " + err);
                self._res.status(500).json(err); 
            } else {
                console.log('File Id: ', file.id);
                self._res.status(200).send();
            }
        });
    }