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 ์๋ฌ๊ฐ ๋ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์!

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. ์ค๋นํด๋์ ํ์ผ ์์ฑ๋ค๋ก ํ์ผ์ ๋ง๋ค์ด ๋ฆฌํดํด์ค๋๋ค~!