Как изменить доступ к определенной папке Google Drive, используя node.js? - PullRequest
0 голосов
/ 21 февраля 2020

Я узнаю о google drive API для node.js. Мне любопытно узнать , как я могу изменить тип доступа к определенному файлу / папке на диске Google в node.js?

Значит, предположим, у меня есть папка с именем Batman в гугл диске. Внутри папки Batman есть 3 файла, один из которых имеет тип доступа public, а другой - private. Итак, как мне перебрать папку batman, чтобы изменить access type подфайлов?

Код: (он получает 10 имен файлов с диска Google)

const fs = require('fs');
const readline = require('readline');
const {google} = require('googleapis');


 const SCOPES = ['https://www.googleapis.com/auth/drive'];

 const TOKEN_PATH = 'token.json';

 // Load client secrets from a local file.
 fs.readFile('credentials.json', (err, content) => {
  if (err) return console.log('Error loading client secret file:', err);
  // Authorize a client with credentials, then call the Google Drive API.
 authorize(JSON.parse(content), listFiles);
  });



 function authorize(credentials, callback) {
  const {client_secret, client_id, redirect_uris} = credentials.installed;
  const oAuth2Client = new google.auth.OAuth2(
  client_id, client_secret, redirect_uris[0]);

// Check if we have previously stored a token.
fs.readFile(TOKEN_PATH, (err, token) => {
if (err) return getAccessToken(oAuth2Client, callback);
oAuth2Client.setCredentials(JSON.parse(token));
callback(oAuth2Client);
});
}

function getAccessToken(oAuth2Client, callback) {
const authUrl = oAuth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: SCOPES,
});
console.log('Authorize this app by visiting this url:', authUrl);
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
rl.question('Enter the code from that page here: ', (code) => {
  rl.close();
  oAuth2Client.getToken(code, (err, token) => {
    if (err) return console.error('Error retrieving access token', err);
    oAuth2Client.setCredentials(token);
    // Store the token to disk for later program executions
    fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
      if (err) return console.error(err);
      console.log('Token stored to', TOKEN_PATH);
    });
    callback(oAuth2Client);
  });
});
  }

function listFiles(auth) {
const drive = google.drive({version: 'v3', auth});
drive.files.list({
  pageSize: 10,
  fields: 'nextPageToken, files(id, name)',
}, (err, res) => {
  if (err) return console.log('The API returned an error: ' + err);
  const files = res.data.files;
  if (files.length) {
    console.log('Files:');
    files.map((file) => {
       console.log(`${file.name} (${file.id})`);
    });
  } else {
    console.log('No files found.');
  }
  console.log(files)
});
 }

1 Ответ

0 голосов
/ 02 марта 2020

Существует несколько факторов, которые необходимо учитывать, чтобы изменить тип доступа к определенному файлу / папке. Обмен файлами, папками и дисками содержит все детали и параметры, которые могут быть изменены. Для этого программно. Выполните следующие шаги:

1) Список файлов:

Выведите список всех файлов в указанной папке c, которую вы хотите изменить, с помощью параметра q, к сожалению, есть ошибка с google-api- nodejs -client , в котором параметр q не будет возвращать файлы. Об ошибке сообщается здесь , так что вы можете оставить комментарий или дать большой знак, чтобы сообщить Google, что у вас также есть эта проблема. В качестве обходного пути я рекомендую использовать ax ios.

const queryFoldersWithAxios = async () => {
  const params = {
    q: "'<YOUR_FOLDER_ID>' in parents",
    fields: "files(name,id)"
  };
  const headers = {
    "Authorization": "Bearer <YOUR_ACCESS_TOKEN>", 
    "Content-Type": "application/json"
  }
  return await axios.get("https://www.googleapis.com/drive/v3/files", {params, headers})
}

2) Создать разрешения

Вы можете создать новое разрешение, просто передав идентификатор файла.

const createPermissions = async (drive, fileId) => {
  // Return the Promise result after completing its task
  return new Promise((resolve, reject) => {
    const body = {
      "role": "reader",
      "type": "anyone"
    };
    return drive.permissions.create({ 
      fileId,
      resource: body 
    },(err, results) => err ? reject(err) : resolve(results));
  });
}

3) Список разрешений файла

Вы можете проверить все разрешения в файле, перечислив его разрешения, и даже получить идентификаторы разрешений.

const listFilePermissions = async (drive, fileId) => {
  // Return the Promise result after completing its task
  return new Promise((resolve, reject) => {
    return drive.permissions.list({ fileId }, {
      "fields": 'permissions'
    },(err, results) => err ? reject(err) : resolve(results))
  });
}

Уведомление

В качестве примера того, что вы можете сделать, сделайте второй шаг. Пожалуйста, прочитайте Обмен файлами, папками и дисками , чтобы узнать все возможные комбинации, которые вы могли делать. Кроме того, вы можете поиграть с Попробуйте этот API , чтобы проверить разрешения перед их реализацией в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...