-
-
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 functionInstead 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 functionInstead 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 functionInstead this worked for me