云存储中的图片地址,是需要用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(0, 1);
接着把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,
maxAge: 1800
}
})
打印的结果如下
已经接近我们想要的了,最后我们只需要调用换取临时连接url的接口就可以了
把fileIdList传进去getTemporaryUrl接口里。获取结果
let responseList = [];
//请求临时链接
responseList = await storage.getTemporaryUrl(fileIdList);
console.log(responseList);
让我们来看看打印结果
url就是我们需要的地址了。
完结撒花!
有没有完整代码分享一下
ok got it
膜拜