我正在做一个google drive项目,但我无法使用Axios将搜索参数发送到google API

有没有人可以向我解释一下如何像在Google drive 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)
})

提前感谢:)

推荐答案

以下是如何将Google Drive API与AXios结合使用来解决您的每个问题:

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

不,你可以的!您可以使用createdTimemodifiedTime筛选器(请参阅更多可用的查询条件here)

  1. 按大小查找文件

可以,但是,您需要返回文件/文件夹的大小,过滤需要按特定大小返回结果文件,您不需要下载文件,但是效率可能会有点低,因为您需要先拉取文件(使用查询过滤器来限制结果).

  1. 查找所有空文件夹

可以,停那儿吧!但与前一点类似,您需要迭代每个文件夹并使用文件夹ID搜索文件,判断文件是否为空. 确保您只使用MIMETYPE过滤application/vnd.google-apps.folder过滤文件夹

  1. 按类型查找文件,如ppt、image等

使用mimeType,即image/jpeg

Google drive search filters                                                                                 View in Fusebit
// 按日期搜索所有文件和文件夹
const dateFilter = new Date('January 01, 2022').toISOString();

// 1. 按日期搜索所有文件和文件夹
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. 按大小查找文件
const sizeInBytes = 1024;
const filesFilteredBySize = filesFilteredByDate.data.files.filter(file => Number(file.size || 0) >= sizeInBytes);

// 3. 查找所有空文件夹
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 drive.files.list({
    folderId: folder.id
  });
  if (!childrenResponse.data.files.length) {
    emptyFolders.push(folder);
  }
}

// 4. 按类型查找文件,如ppt、image等
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}'`);

Javascript相关问答推荐

JavaScript:循环访问不断变化的数组中的元素

如何在JavaScript中通过一次单击即可举办多个活动

使用typeof运算符获取对象值类型-接收字符串而不是数组

使用redux-toolet DelivercThunks刷新访问令牌

将自定义排序应用于角形数字数组

Chromium会将URL与JS一起传递到V8吗?

如何在 cypress 中使用静态嵌套循环

如何控制Reaction路由加载器中的错误状态?

变量的值在Reaction组件中的Try-Catch语句之外丢失

如何在ASP.NET JavaScript中使用Google Charts API仅对绘制为负方向的条形图移动堆叠条形图标签位置

Use Location位置成员在HashRouter内为空

Webpack在导入前混淆文件名

VSCode中出现随机行

为什么云存储中的文件不能公开使用?

AJAX POST在控制器中返回空(ASP.NET MVC)

Google脚本数组映射函数横向输出

未捕获的运行时错误:调度程序为空

使用自动识别发出信号(&Q)

在对象的嵌套数组中添加两个属性

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?