-
-
Save davestevens/6f376f220cc31b4a25cd to your computer and use it in GitHub Desktop.
var google = require("googleapis"), | |
drive = google.drive("v2"), | |
fs = require("fs"); | |
var config = { | |
"client_id": "client_id", | |
"client_secret": "client_secret", | |
"scope": "scope", | |
"redirect_url": "redirect_rul", | |
"tokens": { | |
"access_token": "access_token", | |
"token_type": "Bearer", | |
"id_token": "id_token", | |
"refresh_token": "refresh_token", | |
"expiry_date": "expiry_date" | |
} | |
}; | |
function buildClient() { | |
var client = new google.auth.OAuth2( | |
config.client_id, | |
config.client_secret, | |
config.redirect_url | |
); | |
client.setCredentials(config.tokens); | |
return client; | |
} | |
var client = buildClient(), | |
folderId = "folderId"; // The Google Drive Folder Id | |
// Request all image files from folder | |
drive.children.list({ | |
auth: client, | |
folderId: folderId, | |
q: "mimeType contains 'image' and trashed = false" | |
}, function(error, response) { | |
if (error) { return console.log("ERROR", error); } | |
response.items.forEach(function(item) { | |
var file = fs.createWriteStream("./" + item.title); | |
file.on("finish", function() { | |
console.log("downloaded", item.title); | |
}); | |
// Download file | |
drive.files.get({ | |
auth: client, | |
fileId: item.id, | |
alt: "media" | |
}).pipe(file); | |
}); | |
}); |
This code didn't work for me. I got an error that
drive.files.get.pipe is not a function
Instead this worked for medrive.files.get( {fileId: fileId, alt: ‘media’}, {responseType: ‘stream’}, (err, res) => { res.data .on(‘end’, () => { console.log(‘Done’); }) .on(‘error’, err => { console.log(‘Error’, err); }) .pipe(dest); }
@rotimi-best
While using same code, I get error as
(node:17335) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'data' of undefined
. Can you help?
This code didn't work for me. I got an error that
drive.files.get.pipe is not a function
Instead this worked for medrive.files.get( {fileId: fileId, alt: ‘media’}, {responseType: ‘stream’}, (err, res) => { res.data .on(‘end’, () => { console.log(‘Done’); }) .on(‘error’, err => { console.log(‘Error’, err); }) .pipe(dest); }@rotimi-best
While using same code, I get error as
(node:17335) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'data' of undefined
. Can you help?
@erIamshivani Can you please show me the result of console.log(res)
?
You should add:
if (err) { return console.log("ERROR", err); }
i think thats why res is undefined.
drive.files.get(
{fileId: fileId, alt: 'media'}, {responseType: 'stream'},
(err, res) => {
if (err) { return console.log("ERROR", err);
res.data
.on('end', () => {
console.log(‘Done’);
})
.on('error', err => {
console.log(‘Error’, err);
})
.pipe(dest);
}
Thank you for responding.
But this answer helped me before I checked your response.
@davestevens that is very correct.
@erIamshivani So what did you do differently?
This one works as well
drive.files.get({fileId: randomFile.id, alt: 'media'}, {responseType: 'stream'}) .then((res) => res.data.pipe(dest)) .catch(err => console.log(err));
final code for me
const fileWrite = fs.createWriteStream('./' + 'a.png');
fileWrite.on('finish', function () {
console.log('downloaded', 'a.png');
});
const file = await service.files.get(
{
auth,
fileId,
alt: 'media',
},
{ responseType: 'stream' }
);
if (file) {
file.data
.on('end', () => {
console.log('Done');
})
.on('error', (err) => {
console.log('Error', err);
})
.pipe(fileWrite);
}
or
const fileWrite = fs.createWriteStream('./' + 'a.png');
fileWrite.on('finish', function () {
console.log('downloaded', 'a.png');
});
const drive = google.drive('v3');
drive.files.get(
{ fileId, auth, alt: 'media' },
{ responseType: 'stream' },
(err, res) => {
if (err) {
throw err;
}
if (res) {
res.data
.on('end', () => {
console.log('Done');
})
.on('error', (err) => {
console.log('Error', err);
})
.pipe(fileWrite);
}
}
);
@davestevens thank you!
This code didn't work for me. I got an error that
drive.files.get.pipe is not a function
Instead this worked for me