diff --git a/src/app/api/qna/file/route.ts b/src/app/api/qna/file/route.ts index 01930f2..602bbd6 100644 --- a/src/app/api/qna/file/route.ts +++ b/src/app/api/qna/file/route.ts @@ -1,33 +1,73 @@ import axios from 'axios' import { NextResponse } from 'next/server' +// export async function GET(request: Request) { +// const { searchParams } = new URL(request.url) +// const encodeFileNo = searchParams.get('encodeFileNo') +// const srcFileNm = searchParams.get('srcFileNm') + +// if (!encodeFileNo) { +// return NextResponse.json({ error: 'encodeFileNo is required' }, { status: 400 }) +// } + +// try { +// const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/file/downloadFile2`, { +// params: { +// encodeFileNo, +// }, +// responseType: 'arraybuffer', +// }) + +// if (response.headers['content-type'] === 'text/html;charset=utf-8') { +// return NextResponse.json({ error: 'file not found' }, { status: 404 }) +// } + +// const contentType = response.headers['content-type'] || 'application/octet-stream' +// const contentDisposition = response.headers['content-disposition'] || 'inline' + +// return new NextResponse(response.data, { +// status: 200, +// headers: { +// 'Content-Type': contentType, +// 'Content-Disposition': contentDisposition, +// }, +// }) +// } catch (error: any) { +// console.error('File download error:', error) +// return NextResponse.json({ error: error.response?.data || 'Failed to download file' }, { status: 500 }) +// } +// } + export async function GET(request: Request) { const { searchParams } = new URL(request.url) const encodeFileNo = searchParams.get('encodeFileNo') - - const srcFileNm = searchParams.get('srcFileNm') + const srcFileNm = searchParams.get('srcFileNm') || 'downloaded-file' if (!encodeFileNo) { return NextResponse.json({ error: 'encodeFileNo is required' }, { status: 400 }) } + + const url = `${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/file/downloadFile2?encodeFileNo=${encodeFileNo}` + try { - const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/file/downloadFile2`, { - responseType: 'arraybuffer', - params: { - encodeFileNo, - }, - }) - if (response.headers['content-type'] === 'text/html;charset=utf-8') { - return NextResponse.json({ error: 'file not found' }, { status: 404 }) + const resp = await fetch(url) + + if (!resp.ok) { + return NextResponse.json({ error: 'Failed to download file' }, { status: 500 }) } - return new NextResponse(response.data, { + + const contentType = resp.headers.get('content-type') || 'application/octet-stream' + const contentDisposition = resp.headers.get('content-disposition') || `attachment; filename="${srcFileNm}"` + + return new NextResponse(resp.body, { status: 200, headers: { - 'Content-Type': 'application/octet-stream;charset=UTF-8', - 'Content-Disposition': `attachment; filename="${srcFileNm}"`, + 'Content-Type': contentType, + 'Content-Disposition': contentDisposition, }, }) } catch (error: any) { - return NextResponse.json({ error: error.response.data }, { status: 500 }) + console.error('File download error:', error) + return NextResponse.json({ error: error.response?.data || 'Failed to download file' }, { status: 500 }) } } diff --git a/src/hooks/useInquiry.ts b/src/hooks/useInquiry.ts index a5ed2ab..23b433e 100644 --- a/src/hooks/useInquiry.ts +++ b/src/hooks/useInquiry.ts @@ -76,19 +76,22 @@ export function useInquiry( const downloadFile = async (encodeFileNo: number, srcFileNm: string) => { try { - const resp = await axiosInstance(null).get(`/api/qna/file`, { params: { encodeFileNo, srcFileNm } }) - const blob = new Blob([resp.data], { type: 'application/octet-stream;charset=UTF-8' }) + const resp = await fetch(`/api/qna/file?encodeFileNo=${encodeFileNo}&srcFileNm=${srcFileNm}`) + + const blob = await resp.blob() const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url - a.download = `${srcFileNm}` + a.download = srcFileNm + document.body.appendChild(a) a.click() + document.body.removeChild(a) URL.revokeObjectURL(url) + return blob - } catch (error: any) { - if (error.response.status === 404) { - alert('ファイルが見つかりません') - } + } catch (error) { + console.error('File download error:', error) + alert('ファイルのダウンロードに失敗しました') return null } }