๐Ÿ’ป My Work/๐Ÿ”ฅ React

[React/JS] Image URL๋กœ ํŒŒ์ผ ๊ฐ์ฒด(File object) ์ƒ์„ฑํ•˜๊ธฐ

Jaeseo Kim 2022. 11. 3. 23:30

https://avoc-o-d.tistory.com/91

 

[React/JS] CORS ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ(์ด๋ฏธ์ง€ URL์„ API ์š”์ฒญ, ์ด๋ฏธ์ง€ URL๋กœ Blob, Blob๋กœ File ์ƒ์„ฑ)

https://velog.io/@zero-black/CORS-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-Reverse-Proxy-server-%EA%B5%AC%EC%B6%95-with-Nginx CORS ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ + Reverse Proxy server ๊ตฌ์ถ• with Nginx ์œ„์™€ ๊ฐ™์ด React์—์„œ ์™ธ๋ถ€ api๋กœ ์š”์ฒญ์„

avoc-o-d.tistory.com

fetchํ•˜์‹ค ๋•Œ, CORS ์—๋Ÿฌ๊ฐ€ ๋‚  ์‹œ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

 

 

File ๊ฐ์ฒด

const convertUrlToFile = async (url) => {
  const response = await fetch(url);
  const data = await response.blob();
  const filename = url.split("/").pop(); // url์—์„œ ํŒŒ์ผ๋ช… ์ถ”์ถœ
  const ext = url.split(".").pop(); // url์—์„œ ์ด๋ฏธ์ง€ ํ˜•์‹ ์ถ”์ถœ
  const metadata = { type: `image/${ext}` };
  return new File([data], filename, metadata);
};

๊ฒฐ๋ก ์ ์œผ๋กœ ์ฝ”๋“œ๋Š” ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค!

 

 

 

"https://์ด๋ฏธ์ง€์ด๋ฆ„.jpg";

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€ url์ด ์žˆ๋‹ค๊ณ  ํ• ๊ฒŒ์š”!

1. response.blob() : ์‘๋‹ต์„ Blob(ํƒ€์ž…์ด ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ) ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ (์ฃผ๋กœ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ)
2. .split("/").pop(): "/" ์•ž์— ์žˆ๋Š” ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์ถ”์ถœ
3. .split(".").pop() : "." ์•ž์— ์žˆ๋Š” jpg ์ด๋ฏธ์ง€ ํ˜•์‹์„ ์ถ”์ถœ
4. { type: `image/${ext}` } : ์ถ”์ถœํ•œ ์ด๋ฏธ์ง€ ํ˜•์‹์„ ์ด์šฉํ•ด์„œ ์ด๋ฏธ์ง€ ํƒ€์ž… ์ง€์ •
5. ์ค€๋น„ํ•ด๋†“์€ ํŒŒ์ผ ์†์„ฑ๋“ค๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋ฆฌํ„ดํ•ด์ค๋‹ˆ๋‹ค~!