티스토리 뷰

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
링크
«   2024/05   »
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 31
글 보관함