/** * ๐Ÿ“„ File Download Utility * ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์œ ํ‹ธ๋ฆฌํ‹ฐ * * - API๋ฅผ ํ†ตํ•œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์ฒ˜๋ฆฌ * - Blob ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ๋งํฌ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ * - ํŒŒ์ผ๋ช… ์ง€์ • ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๊ธฐ๋Šฅ * - ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฐ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ * - ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํƒ€์ž… ์ง€์› (์—‘์…€, PDF ๋“ฑ) * - Fetch ๊ธฐ๋ฐ˜ HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ */ export const handleDownload = async (api: string, fileNm: string) => { try { const response = await fetch(api, { method: 'GET', }); if (!response.ok) throw new Error('ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์‹คํŒจ'); const blob = await response.blob(); fileDownload(blob, fileNm); } catch (error) { console.error('๋‹ค์šด๋กœ๋“œ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error); } }; export const fileDownload = (data: Blob, fileName: string) => { // Blob๋ฐ์ดํ„ฐ ์ž„์‹œlink๋กœ ์—ฐ๊ฒฐ const url = window.URL.createObjectURL(data); const link = document.createElement('a'); link.href = url; link.download = fileName; // ์›ํ•˜๋Š” ํŒŒ์ผ๋ช… ์ง€์ • document.body.appendChild(link); link.click(); // ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ link.remove(); window.URL.revokeObjectURL(url); }