簡體   English   中英

除了刪除和上傳之外,更新 firebase 存儲桶中的圖像有什么替代方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM