첨부파일 다운로드 해더에서 파일명 지정 방법

1. 라라벨

$asciiFallback = preg_replace('/[^\x20-\x7E]/', '_', $attachment->name);
$asciiFallback = str_replace(['%', '/', '\\', '"'], '_', $asciiFallback);

$headers += [
    'Content-Type'=>$attachment->type,
    'Content-Transfer-Encoding'=>'binary',
    // 'Content-Disposition' => 'attachment; filename="'.$attachment->name.'"',
    // 'Content-Disposition' => 'inline; filename="'.$attachment->name.'"',
    'Content-Disposition' => HeaderUtils::makeDisposition(
        HeaderUtils::DISPOSITION_INLINE,
        $attachment->name,
        $asciiFallback
    ),
];

2. 수동으로 구현

$encoded  = rawurlencode($attachment->name);
$fallback = preg_replace('/[^\x20-\x7E]/', '_', $attachment->name);
$fallback = str_replace(['"', '\\'], '_', $fallback);

$headers += [
    'Content-Type'=>$attachment->type,
    'Content-Transfer-Encoding'=>'binary',
    'Content-Disposition' => "inline; filename=\"{$fallback}\"; filename*=UTF-8''{$encoded}",
];


3. 가장 심플

'Content-Disposition' => "inline; filename*=UTF-8''".rawurlencode($attachment->name),


설명

filename= 보다 filename*= 가 우선이며,
IE8 이 아니라면 filename*= 만 있어도 문제 없다.
filename= 은 ASCII 문자만 사용할 수 있다는 문제가 있기 때문에 생기는 이슈



댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
5.31
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
6.13
6.14
6.15
6.16
6.17
6.18
6.19
6.21
6.22
6.23
6.24
6.25
6.26
6.27
6.28
6.29
6.30
7.1
7.2
7.3
7.4