如何一键获取云存储中指定文件夹的所有图片url地址
发布于 4 年前 作者 ping32 2741 次浏览 来自 分享

云存储中的图片地址,是需要用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就是我们需要的地址了。

完结撒花!

1 回复
回到顶部