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

new

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) 명령어
[공지] 기술 게시판
4.26
4.27
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.7
5.8
5.9
5.10
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1
6.2
6.3
6.4
6.5
6.6