JavaScript >> Javascript 文檔 >  >> Tags >> API

使上傳的圖像文件可以通過 URL 訪問的正確方法是什麼 - google drive api v3

我在 Google API 的開發者控制台上創建了一個項目並啟用了 Google Drive API。

我還創建並下載了我在 Node.js 後端服務器上使用的服務帳戶憑據 .json 文件,並在谷歌驅動器上連接和上傳圖像文件。

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);
    }
});

Tutorial JavaScript 教程
  1. 如何轉義 JSON 字符串以將其包含在 URL 中?

  2. 如何在 mongoose.js 中獲取最新和最舊的記錄(或者只是它們之間的時間跨度)

  3. 如何更改 Highcharts 中的文本顏色

  4. Chrome javascript 調試器斷點不執行任何操作?

  5. 向 OpenCart 中的所有頁面添加 javascript

  6. Bootstrap 4 - 避免屏幕點擊的模式關閉

  7. SweetAlert showLoaderOnConfirm 不顯示

  1. Express.js 應用程序在嘗試查詢 PostgreSQL 數據庫時超時

  2. Javascript - 基於另一個數組對數組進行排序

  3. 從java腳本將變量發送到數據庫的php腳本

  4. 如何在javascript中將數組轉換為樹結構

  5. 截斷長字符串的聰明方法

  6. 類型錯誤:無法讀取 null 的屬性“名稱”[關閉]

  7. Javascript 事件監聽器問題

  1. 為什麼 while(arr.length) 會這樣

  2. GWT Ext 2.0 發布了……這很愚蠢! (涼爽的)

  3. 使用 Nuxt.js 進行簡單的服務器端渲染、路由和頁面轉換

  4. 更改嵌入組件的 prop 值