繁体   English   中英

使上传的图像文件可通过 URL 访问的正确方法是什么 - google drive api v3

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM