评论

如何一键获取云存储中指定文件夹的所有图片url地址

听说很多人不知道怎么获取云存储文件夹里的所有文件?

云存储中的图片地址,是需要用cloudId或者路径来换取。像这样:

.getTempFileURL({
    fileList: ["cloud://a/b/c", "cloud://d/e/f"]
  })
  .then((res) => {
    // fileList 是一个有如下结构的对象数组
    // [{
    //    fileID: 'cloud://webtestjimmy-5328c3.7765-webtestjimmy-5328c3-1251059088/腾讯云.png', // 文件 ID
    //    tempFileURL: '', // 临时文件网络链接
    //    maxAge: 120 * 60 * 1000, // 有效期
    // }]
    console.log(res.fileList);
  });


但是怎么能批量获取云存储中指定文件夹的图片或者文件的cloudID或着路径,然后来换取临时链接呢?

很简单

我们首先需要通过node.js管理端SDK(https://docs.cloudbase.net/api-reference/manager/node/storage.html#listdirectoryfiles)的API中 listDirectoryFiles来获取指定文件的所有文件

const result = await storage.listDirectoryFiles("testfiles/img/");


调用结果如下

它的结构是这样

{ Key: 'testfiles/img/13f5e8de79ba426feff3987b
    LastModified: '2021-03-23T06:23:53.000Z',
    ETag: '"13f5e8de79ba426feff3987be102f012"',
    Size: '333884',
    Owner: { ID: '1304607081', DisplayName: '130
    StorageClass: 'STANDARD' },


然后我们需要的便是Key这个数据,因为它对应的是我们文件的路径。但是需要注意的是,返回的数据第一个我们需要去掉,因为它是指定文件夹的根目录,没有意义。

所以我们需要这样做

//删除第一个元素
result.splice(01);


接着把Key提取出来

let requestList = [];
    //把key提取出来
result.map((value) => {
  requestList.push(value['Key']);
});


因为换取url的接口格式和参数如下

storage.getTemporaryUrl([
    {
      cloudPath: "files/data.txt",
      maxAge: 86400,
    },
  ]);

传进一个包含cloudPath也就是我们提取出来路径,还有一个url有效的时间

所以我们需要构建一个这样的数组

let fileIdList = []
//构建请求文件fileID数组
fileIdList = requestList.map((value) => {
  return {
      cloudPath: value,
       maxAge1800
      }
})


打印的结果如下

已经接近我们想要的了,最后我们只需要调用换取临时连接url的接口就可以了

把fileIdList传进去getTemporaryUrl接口里。获取结果


let responseList = [];
//请求临时链接
responseList = await storage.getTemporaryUrl(fileIdList);
console.log(responseList);


让我们来看看打印结果

url就是我们需要的地址了。

完结撒花!


最后一次编辑于  2021-03-24  
点赞 10
收藏
评论

3 个评论

  • 겁나
    겁나
    2022-10-17

    有没有完整代码分享一下

    2022-10-17
    赞同 1
    回复
  • 弥赛亚
    弥赛亚
    2021-04-06

    ok got it

    2021-04-06
    赞同 1
    回复
  • 白居易是只猫
    白居易是只猫
    2021-07-20

    膜拜

    2021-07-20
    赞同
    回复
登录 后发表内容