[英]What's the correct way to make the uploaded image file accessible via URL - google drive api v3
我在 Google API 的开发者控制台上创建了一个项目并启用了 Google Drive API。
我已经创建并下载了服务帐户凭据。json 文件,我在 Node.js 后端服务器上使用它,并在谷歌驱动器上连接和上传图像文件。
npm i googleapis
const { google } = require('googleapis');
let privatekey = require("./privatekey.json");
// configure a JWT auth client
let jwtClient = new google.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
['https://www.googleapis.com/auth/drive']);
//authenticate request
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
} else {
console.log("Successfully connected to gdrive!");
}
});
//Google Drive API
let drive = google.drive('v3');
drive.files.list({
auth: jwtClient,
q: "name contains 'photo'"
}, function (err, response) {
if (err) {
console.log('The API returned an error: ' + err);
return;
}
console.log(response.data);
var files = response.data.files;
if (files.length == 0) {
console.log('No files found.');
} else {
console.log('Files from Google Drive:');
for (var i = 0; i < files.length; i++) {
var file = files[i];
console.log('%s (%s)', file.name, file.id);
}
}
});
let fs = require('fs');
var fileMetadata = {
name: 'photo.png',
};
var media = {
mimeType: 'image/jpeg',
body: fs.createReadStream('files/photo.png'),
};
drive.files.create(
{
auth: jwtClient,
resource: fileMetadata,
media: media,
fields: 'id',
},
function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.data.id);
}
},
);
当我上传文件时,我会在响应中获得唯一的文件 ID。
在 android 应用程序以及前端反应应用程序上,我想使用 URL 显示此图像文件。
我尝试了 https://drive.google.com/open?id=PASTE YOUR ID HERE 以及http://drive.google.com/uc?export=view&id=PASTE YOUR ID HERE 但它说你需要访问权限。
我在上传图片时也尝试过publishAuto:true
但它没有用。
使上传的图像文件可通过 URL 访问的正确方法是什么?
我通过创建一个新文件夹并将该文件夹的权限设置为来解决它
type: anyone
role: reader
然后上传图片到这个文件夹。 当我想显示上传的图片时,我可以使用下面的 URL 显示:
https://drive.google.com/thumbnail?id=YOUR IMAGE ID
这是完整的代码。
const { google } = require('googleapis');
let privatekey = require("./privatekey.json");
let drive = google.drive('v3');
// configure a JWT auth client - login and get the token
let jwtClient = new google.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
['https://www.googleapis.com/auth/drive']);
//authenticate request
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
} else {
console.log("Successfully connected to gdrive!");
}
});
仅运行此代码一次。
//For creating google drive folder
var fileMetadata = {
'name': 'ProductIcons',
'mimeType': 'application/vnd.google-apps.folder'
};
drive.files.create({
auth: jwtClient,
resource: fileMetadata,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('Folder Id: ', file);
}
});
//For changing folder permission
var fileId = 'FOLDER ID HERE';
var permission =
{
'type': 'anyone',
'role': 'reader',
}
;
let drive = google.drive('v3');
drive.permissions.create({
auth: jwtClient,
resource: permission,
fileId: fileId,
fields: 'id',
}, function (err, res) {
if (err) {
// Handle error...
console.error(err);
} else {
console.log('Permission ID: ', res)
}
});
然后使用以下代码在该文件夹中上传任意数量的图像。
//For uploading image to folder
var folderId = 'FOLDER ID HERE';
let fs = require('fs')
var fileMetadata = {
'name': 'photo.png',
parents: [folderId]
};
var media = {
mimeType: 'image/jpeg',
body: fs.createReadStream('files/photo.png')
};
drive.files.create({
auth: jwtClient,
resource: fileMetadata,
publishAuto:true,
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.data.id);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.