티스토리 뷰
1. 증상
서버에서 파일 다운로드를 처리했다.
다운로드 되는 파일이 엑셀파일이었는데, 분명 업로드 된 경로에서 파일을 열면 제대로 열렸다.
근데 다운로드만 하면 손상된 파일이라며 열리지 않았다.
2. 문제점
그래서 다운로드가 되는 응답 헤더와 안되는 쪽의 응답 헤더를 확인했다.
그랬더니, 다운로드 되는 쪽 응답해더는
Content-Disposition: attachment; filename=2023-03-16_stock_sample_222.xlsx Content-Length: 9112 Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
근데, 내가 다운로드로 내리는 응답헤더는
Content-Type: text/html |
이러면서, 화면에 내가 내리는 response의 내용이 출력되었다.
HTTP/1.0 200 OK Cache-Control: no-cache, private Content-Disposition: attachment; filename=2023-03-16_stock_sample_222.xlsx Content-Length: 9112 Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet Date: Thu, 16 Mar 2023 09:36:14 GMT
이렇게.
어떻게 해도 계속 이렇게 내려가는거였다...
그러면서 파일은 다운로드가 잘 되고 있고, 손상된 파일이라고 열리지는 않고...
미춋나 진짜.....
프론트에서는 문제가 없었던게, 다른 곳에서 쓰는 메소드였고 그 곳에서는 잘 작동하고 있었다.
그리고 서버쪽 코드를 봤는데 별로 이상할게 없었다.
매우 간단하다.
서비스나 레포지토리 갈 필요도 없이 컨트롤러에서 해당 코드가 끝난다.
public function download(Log $log): String { $fileName = Carbon::now()->toDateString().'_'.$log->name; Log::debug('log download', [Storage::exists($Log->path), $log->path, $fileName]); if (Storage::exists($log->path)) { return Storage::download($log->path, $fileName); } return response()->json(['message' => '해당 파일이 존재하지 않습니다.']); } |
코드는 이게 다다.
Log::debug('download header', [$response->header]); 로 찍어봐도 헤더는 잘 저장이 되어있었다.
여기에서 만약 이상한걸 느꼈다면, 부럽소........ 난 이걸로 3일을 헤매었소................
3. 결론
결론을 먼저 말하자면, 메소드의 리턴타입 지정이 잘 못 되었다.
저렇게 response로 json을 주거나 파일을 내려주면 StreamedResponse가 되어야한다.
실제로 Storage::download 메소드를 확인해보면 리턴타입이 StreamedResponse로 되어있다.

FilesystemAdapter.php를 보면 다음과 같이 나와있다.
저기 Returns 보인다.....하.
그래서 response 타입을 다시 맞게 지정해줬더니 잘 다운로드 되고 파일도 잘 열렸다.
json타입도 있으니까 리턴타입은 <StreamedResponse|JsonResponse>이다.
와 쪽팔려.
찾기 힘들었다고 하더라도, 이렇게 쪽팔리고 부끄러울수가 없었다.......
다음엔 리턴타입 잘 챙기자........ 다음에 안그럼 되지 뭐....
그래도 그 과정에서 프론트 오류도 하나 고치고...뭐.. 아예 수확이 없었던건 아니네...
- Total
- Today
- Yesterday
- twoseven.kr/0410
- PhpStorm
- xml로도
- 엘라스틱서치한글성공!
- UTF8
- 테스팅
- 테스팅환경
- 프로그래밍은디버거부터시작이다
- twoserven.kr/0410
- JSON으로도
- gcp
- 배열을_이쁘게
- fmf
- 더미데이터도유형이있어요
- Testing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |