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

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}}
    -
목록형 📅 달력형