如何使用 axios 将 api 请求设置为 google 驱动器 api

how to set api request to google drive api using axios

我正在处理一个 google 驱动器项目,但我无法使用 Axios 将搜索参数发送到 google API 来自前端反应

任何人都可以向我解释如何在 google 驱动器 api url

中编写查询
  1. 按日期搜索所有文件和文件夹
  2. 按大小查找文件
  3. 查找所有空文件夹
  4. 按ppt、图片等类型查找文件

Axios 请求看起来像那样

 axios.get('https://www.googleapis.com/drive/v3/files?access_token='+accessToken+'&q=mimeType%3D%22application%2Fvnd.google-apps.folder%22').then(res=>{
    console.log(res)
    setFolders(res.data.files)
}).then(err=>{
    console.log(err)
})

提前致谢:)

Axios 不是您的问题,API 不支持您在大多数情况下尝试做的事情。

Search all files and folders by date

你真的不能。全部下载并在本地搜索

Find a file by size

你不能。全部下载并在本地搜索

Find all empty folders

这并不容易,但会有很多要求。您可以使用 q 仅获取文件夹,然后使用父项发出单独的请求,然后查看是否返回任何文件。

Find a file by type such as ppt, image, etc

使用 q 参数并按 MIME 类型搜索,您只需要 google 您要查找的文件的正确 MIME 类型。

mimeType='application/vnd.ms-powerpoint'

您应该查看 Search terms refrence 文档,它会告诉您可以搜索的内容。

这就是你如何使用 Google Drive API 和 axios 来解决你的每个问题:

  1. 按日期搜索所有文件和文件夹

是的,你可以!您可以使用 createdTimemodifiedTime 过滤器(查看更多可用查询词 here

  1. 按大小查找文件

可以,但是,您需要 return file/folder 的大小并按特定大小过滤生成的文件,您不需要下载文件,但是它可能有点低效,因为您需要先获取文件(使用查询过滤器来限制结果)。

  1. 查找所有空文件夹

是的,你可以!但与上一点类似,您需要遍历每个文件夹并使用文件夹 id 搜索文件,检查文件是否为空。 确保仅使用 mimeType 过滤器 application/vnd.google-apps.folder

来过滤文件夹
  1. 按ppt、图片等类型查找文件

使用 mimeType 即 image/jpeg

Google drive search filters                                                                                 View in Fusebit
// Search all files and folders by date
const dateFilter = new Date('January 01, 2022').toISOString();

// 1. Search all files and folders by date
const filesFilteredByDate = await axios.get('https://www.googleapis.com/drive/v3/files', {
    params: {
     q: `createdTime >= '${dateFilter}' or modifiedTime >= '${dateFilter}'`,
     fields: 'files(id,name,modifiedTime,createdTime,mimeType,size)',
     spaces: 'drive',
    },
    headers: {
      authorization: `Bearer ${access_token}`
    }
  });

// 2. Find a file by size
const sizeInBytes = 1024;
const filesFilteredBySize = filesFilteredByDate.data.files.filter(file => Number(file.size || 0) >= sizeInBytes);

// 3. Find all empty folders
const emptyFoldersSearch = await axios.get('https://www.googleapis.com/drive/v3/files', {
    params: {
      q: `mimeType = 'application/vnd.google-apps.folder'`,
      fields: 'files(id, name)',
      spaces: 'drive',
    },
    headers: {
      authorization: `Bearer ${access_token}`
    }
  });

const emptyFolders = [];

for await (const folder of emptyFoldersSearch.data.files) {
   const childrenResponse = await axios.get('https://www.googleapis.com/drive/v3/files', {
      params: {
        folderId: folder.id,
        spaces: 'drive',
      },
      headers: {
        authorization: `Bearer ${googleClient.fusebit.credentials.access_token}`
      }
    });

  if (!childrenResponse.data.files.length) {
    emptyFolders.push(folder);
  }
}

// 4. Find a file by type such as ppt, image, etc
const mimeType = 'image/jpeg';
const filesFilteredByType = await axios.get('https://www.googleapis.com/drive/v3/files', {
    params:{
      q: `mimeType:'${mimeType}'`,
      fields: 'files(id,name,mimeType,size)',
      spaces: 'drive',
    },
    headers: {
      authorization: `Bearer ${access_token}`
  }
});

console.log(`Found ${filesFilteredByDate.data.files.length} files/folders created or modified at ${dateFilter}`);
console.log(`Files larger than ${sizeInBytes} bytes:`, filesFilteredBySize);
console.log(`Found ${emptyFolders.length} empty folders`);
console.log(`Found ${filesFilteredByType.data.files.length} images of type ${mimeType}'`);