[英]What is an alternative to updating an image in firebase storage bucket than deleting and uploaded?
我將博客文章存儲在 firebase 數據庫中。 博文可以有圖片。 我有一個存儲圖像的存儲桶,我將 url 保存到數據庫中帶有帖子的圖像中。 現在我正在編輯帖子。 其中一部分涉及上傳不同的圖像。 我不希望圖像無限期地堆積在我的存儲桶中。 我寧願用新圖像替換舊圖像。 我就是這樣做的:
const bucket = fbAdmin.storage().bucket('***');
if (fields.filename) {
await bucket.file(fields.filename).delete();
}
const result = await bucket.upload(files.image.path, {metadata: {contentType: files.image.type}});
換句話說,我刪除舊文件然后上傳新文件。
但我必須認為必須有一種更簡單的方法來做到這一點。 不是刪除上傳,不是有更新function嗎? 就像是:
bucket.update(files.image.path, {name: oldFileName});
謝謝
您可以只寫入存儲桶中的相同路徑,而無需先刪除文件。
const bucket = fbAdmin.storage().bucket('***');
const result = await bucket.upload(files.image.path, {metadata: {contentType: files.image.type}});
如果文件已經存在,這將覆蓋它。
雖然 Frank 的解決方案在技術上確實可行,但如果您有任何與 object 關聯的元數據,他的方法會將其刪除。
我發現我能夠使用類似的方法來維護元數據。 這也保留了自定義元數據。
const bucket = admin.storage().bucket('***');
const destObjPath = 'some-path.jpg';
const fileRef = bucket.file(destObjPath);
// Get the object's existing metadata
const existingMetadata = (await fileRef.getMetadata())[0];
// Delete checksum and other calculated metadata fields
delete existingMetadata.crc32c;
delete existingMetadata.etag;
delete existingMetadata.md5Hash;
delete existingMetadata.size;
delete existingMetadata.timeCreated;
delete existingMetadata.timeStorageClassUpdated;
delete existingMetadata.updated;
// Provide the copied metadata along with the object update
await bucket.upload(files.image.path, {
destination: destObjPath,
metadata: existingMetadata
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.