使用 firebase 存储上传后如何获取调整大小的 downloadUrl(Web SDK + Resize images extension)
How to get the resized downloadUrl after upload with firebase storage (Web SDK + Resize images extention)
使用Firebase Web SDK,我可以在上传文件后轻松获取downloadUrl
const task = firebase.ref().child('myFolder').put(file, metadata)
task.then(snapshot => {
snapshot.ref.getDownloadURL())
}
但我安装了 Resize Images Extention,现在,我想尽快获得调整大小的 downloadUrl。怎么做 ?我找不到任何关于它的解释...
扩展根据您的配置确定性地确定新文件名。您可以在扩展的 source code.
中查看有关如何确定名称的确切代码
当您安装扩展程序时,它要求提供相对于原始路径的调整后图像的路径。这就是新图像的路径(当然是相对于原始图像)。
除此之外,documentation 声明它将以配置的宽度和高度作为后缀。
Names the resized image using the same name as the original uploaded image, but suffixed with your specified width and height.
因此,如果您没有指定路径,而是指定了 200x200,然后将 image.jpg
上传到存储桶的根目录,则新名称将是:image_200x200.jpg
,在根目录桶的。
如果您指定了路径 resized
,并且指定了 200x200,并且上传的 image2.jpg
到存储桶的根目录,新名称将是 /resized/image2_200x200.jpg
在同一个存储桶中作为源图像。
要下载 URL,您需要在扩展函数创建新文件后使用新名称调用 getDownloadURL
存储引用。
如果您想等待,可以使用类似以下代码进行轮询:
function delay(t, v) {
return new Promise(function(resolve) {
setTimeout(resolve.bind(null, v), t)
});
}
function keepTrying(triesRemaining, storageRef) {
if (triesRemaining < 0) {
return Promise.reject('out of tries');
}
return storageRef.getDownloadURL().then((url) => {
return url;
}).catch((error) => {
switch (error.code) {
case 'storage/object-not-found':
return delay(2000).then(() => {
return keepTrying(triesRemaining - 1, storageRef)
});
default:
console.log(error);
return Promise.reject(error);
}
})
}
这就是上传后的调用方式:
const storageRef = firebase.storage().ref().child('image_200x200.jpg');
keepTrying(10, storageRef).then((url) => console.log(url));
使用Firebase Web SDK,我可以在上传文件后轻松获取downloadUrl
const task = firebase.ref().child('myFolder').put(file, metadata)
task.then(snapshot => {
snapshot.ref.getDownloadURL())
}
但我安装了 Resize Images Extention,现在,我想尽快获得调整大小的 downloadUrl。怎么做 ?我找不到任何关于它的解释...
扩展根据您的配置确定性地确定新文件名。您可以在扩展的 source code.
中查看有关如何确定名称的确切代码当您安装扩展程序时,它要求提供相对于原始路径的调整后图像的路径。这就是新图像的路径(当然是相对于原始图像)。
除此之外,documentation 声明它将以配置的宽度和高度作为后缀。
Names the resized image using the same name as the original uploaded image, but suffixed with your specified width and height.
因此,如果您没有指定路径,而是指定了 200x200,然后将 image.jpg
上传到存储桶的根目录,则新名称将是:image_200x200.jpg
,在根目录桶的。
如果您指定了路径 resized
,并且指定了 200x200,并且上传的 image2.jpg
到存储桶的根目录,新名称将是 /resized/image2_200x200.jpg
在同一个存储桶中作为源图像。
要下载 URL,您需要在扩展函数创建新文件后使用新名称调用 getDownloadURL
存储引用。
如果您想等待,可以使用类似以下代码进行轮询:
function delay(t, v) {
return new Promise(function(resolve) {
setTimeout(resolve.bind(null, v), t)
});
}
function keepTrying(triesRemaining, storageRef) {
if (triesRemaining < 0) {
return Promise.reject('out of tries');
}
return storageRef.getDownloadURL().then((url) => {
return url;
}).catch((error) => {
switch (error.code) {
case 'storage/object-not-found':
return delay(2000).then(() => {
return keepTrying(triesRemaining - 1, storageRef)
});
default:
console.log(error);
return Promise.reject(error);
}
})
}
这就是上传后的调用方式:
const storageRef = firebase.storage().ref().child('image_200x200.jpg');
keepTrying(10, storageRef).then((url) => console.log(url));