๐ŸŒŸ Firebase Storage: ํŒŒ์ผ ์‚ญ์ œ

summereuna๐Ÿฅยท2022๋…„ 5์›” 23์ผ

๐ŸŒŸ Twinkle (React, Firebase)

๋ชฉ๋ก ๋ณด๊ธฐ
21/42
post-thumbnail

ํ˜„์žฌ ์‚ฌ์ง„์„ ์ฒจ๋ถ€ํ•˜์—ฌ ํŠธ์œ—์„ ์˜ฌ๋ฆฌ๊ณ  ๋‚˜์„œ ์‚ญ์ œ๋ฒ„ํŠผ์œผ๋กœ ๊ทธ ํŠธ์œ—์„ ์‚ญ์ œํ•˜๋ฉด

  • db์ธ ํŒŒ์ด์–ด์Šคํ† ์–ด์—์„œ๋Š” ์‚ญ์ œ๊ฐ€ ๋˜์ง€๋งŒ
  • ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ์˜ฌ๋ผ๊ฐ€๋Š” ์Šคํ† ๋ฆฌ์ง€์—์„œ๋Š” ์‚ญ์ œ๊ฐ€ ์•ˆ๋œ๋‹ค.
    ์™œ๋ƒํ•˜๋ฉด ์•„์ง ๊ทธ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์Šคํ† ๋ฆฌ์ง€์—์„œ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐ

delete() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐ

ํŒŒ์ด์–ด๋ฒ ์ด์Šค ๋ฌธ์„œ๋ฅผ ๋ณด์ž!
firebase > firebase Documtentation > build > storage > web > deleting files

์˜ˆ์‹œ

  1. ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ(reference)๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ ์ฐธ์กฐ์— ๋Œ€ํ•ด delete() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  3. ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉด promise๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ณ , promise๊ฐ€ ๊ฑฐ๋ถ€๋˜๋ฉด ์˜ค๋ฅ˜(error)๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
  • delete()` ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ:
    ์‚ญ์ œํ•˜๋ ค๋Š” ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ํŒŒ์ผ์„ ์‚ญ์ œํ•  ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋“ฑ.
    (์ฐธ๊ณ ) ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์„น์…˜
  • (์ฐธ๊ณ ) ํŒŒ์ผ ์‚ญ์ œ ํ›„ ๋ณต์›์€ ๋ถˆ๊ฐ€ํ•˜๋‹ค.
// โœ… web ver.9

import { getStorage, ref, deleteObject } from "firebase/storage";

const storage = getStorage();

// ์‚ญ์ œํ•˜๋ ค๋Š” ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” reference ๋งŒ๋“ค๊ธฐ
const desertRef = ref(storage, 'images/desert.jpg');

// ํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐ
deleteObject(desertRef).then(() => {
  // ์‚ญ์ œ ์ •์ƒ ์ฒ˜๋ฆฌ๋˜๋ฉด promise ๋ฐ˜ํ™˜
}).catch((error) => {
  // promise ๊ฑฐ๋ถ€๋˜๋ฉด ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜
});

์ฝ”๋“œ ์ž‘์„ฑ

์‚ญ์ œํ•˜๋Š” ํŒŒ์ผ ๊ฐ€๋ฆฌํ‚ค๋Š” ref๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” url์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š”๋ฐ url์— ๋ฌด์—‡์„ ์ ์–ด์•ผ ํ• ๊นŒ?
tweetObj์˜ attachmentUrl์ด ์‚ญ์ œํ•˜๋ ค๋Š” ๊ทธ ํŒŒ์ผ์˜ url ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

import { dbService, storageService } from "fbase";
import { deleteObject, ref } from "firebase/storage";
//์ƒ๋žต...

//๐Ÿ”ฅ ์‚ญ์ œํ•˜๋ ค๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฐ€๋ฆฌํ‚ค๋Š” ref ์ƒ์„ฑ
//๐Ÿ”ฅ tweetObj์˜ attachmentUrl์ด ๋ฐ”๋กœ ์‚ญ์ œํ•˜๋ ค๋Š” ๊ทธ url์ž„
const desertRef = ref(storageService, tweetObj.attachmentUrl);


//ํŠธ์œ— ์‚ญ์ œ
const onDeleteClick = async () => {
  const ok = window.confirm("์ •๋ง ์ด ํŠธ์œ—์„ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?");
  //console.log(ok);  //treu/false ๋ฐ˜ํ™˜ํ•จ
  if (ok) {
    try {
      //ํ•ด๋‹นํ•˜๋Š” ํŠธ์œ— ํŒŒ์ด์–ด์Šคํ† ์–ด์—์„œ ์‚ญ์ œ
      await deleteDoc(tweetTextRef);
      //์ด๋ฏธ์ง€ ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์‚ญ์ œ
      await deleteObject(desertRef);
    } catch (error) {
      window.alert("ํŠธ์œ—์„ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค!");
    }
  }
};

์˜ค์ผ€์ด!
์‚ฌ์ง„์„ ์˜ฌ๋ ธ๋‹ค๊ฐ€ ์‚ญ์ œํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋‹ˆ storage์—์„œ๋„ ์ž˜ ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ œ ๋ฐœ์ƒ!

ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ํ…์ŠคํŠธ๋งŒ ์“ด ํŠธ์œ—์„ ์‚ญ์ œํ•˜๋‹ˆ ์ฝ˜์†”์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค.

attachmentUrl์ด ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ์งธ await์—์„œ desertRef๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ!

๋‘ ๋ฒˆ์งธ await์„ if๋ฌธ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ž.

import { dbService, storageService } from "fbase";
import { deleteObject, ref } from "firebase/storage";
//์ƒ๋žต...

//๐Ÿ”ฅ ์‚ญ์ œํ•˜๋ ค๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฐ€๋ฆฌํ‚ค๋Š” ref ์ƒ์„ฑ
//๐Ÿ”ฅ tweetObj์˜ attachmentUrl์ด ๋ฐ”๋กœ ์‚ญ์ œํ•˜๋ ค๋Š” ๊ทธ url์ž„
const desertRef = ref(storageService, tweetObj.attachmentUrl);


//ํŠธ์œ— ์‚ญ์ œ
const onDeleteClick = async () => {
  const ok = window.confirm("์ •๋ง ์ด ํŠธ์œ—์„ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?");
  //console.log(ok);  //treu/false ๋ฐ˜ํ™˜ํ•จ
  if (ok) {
    try {
      //ํ•ด๋‹นํ•˜๋Š” ํŠธ์œ— ํŒŒ์ด์–ด์Šคํ† ์–ด์—์„œ ์‚ญ์ œ
      await deleteDoc(tweetTextRef);
      //๐Ÿ”ฅ ์‚ญ์ œํ•˜๋ ค๋Š” ํŠธ์œ—์— ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์‚ญ์ œ
      if (tweetObj.attachmentUrl !== "") {
        await deleteObject(desertRef);
      }
    } catch (error) {
      window.alert("ํŠธ์œ—์„ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค!");
    }
  }
};


reference๋Š” ์–ด๋”˜๊ฐ€์˜ object๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ reference๋ฅผ ์ฐพ์ž~!

profile
Always have hope๐Ÿ€ & constant passion๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€