Files
GhiVideo_v4/docs/history/2026-07-07_1739_AI영상요약-다운로드-한글파일명-수정.md
T
b23042andClaude Fable 5 d38b842e8d GhiVideo 소스 복제 — v4 작업 시작 기준
기존 GhiVideo 저장소 HEAD의 트래킹 소스 362개 파일을 복제.
(node_modules·storage·빌드 산출물·대용량 미디어는 .gitignore 규칙대로 제외)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 14:32:51 +09:00

34 lines
1.8 KiB
Markdown

# AI Video Brief — 다운로드 파일명이 제목으로 안 나오는 문제 수정
**소요 시간**: 10분
**Context 사용량**: input 1000k / output 78k tokens (추정값)
## 문제
저장은 되는데 파일명이 영상/음원 제목이 아니라 작업 id로 저장됨.
## 원인 (재현으로 확인)
- Starlette `FileResponse(filename=...)`는 한글 등 비ASCII 파일명일 때
`Content-Disposition: attachment; filename*=utf-8''<인코딩>` **한 형식만** 출력하고
구형/모바일 브라우저·다운로드관리자·curl이 인식하는 기본 `filename="..."` 형식을 빠뜨림
- `filename*`만 있으면 이를 못 읽는 클라이언트는 **URL 마지막 경로(작업 id)로 저장** → 문제 발생
- `curl -OJ` 재현: 파일이 `099fe812f033` 로 저장됨 (제목 아님)
## 수정 (`ai_video_brief/app/main.py`)
- `_content_disposition()` 헬퍼 추가 — RFC 6266 방식으로 **두 형식 모두** 출력:
`attachment; filename="<ASCII대체>"; filename*=utf-8''<UTF-8>`
- `filename*` : 최신 브라우저가 사용 → 완전한 한글 제목
- `filename` : ASCII 대체(한글은 빠지고 스펙/확장자는 유지) → 구형/모바일/curl용, 최소한 작업 id는 아님
- `download_file()``filename=` 대신 이 헤더를 직접 지정
## 테스트 결과
```
헤더: content-disposition: attachment; filename="1 DJI 5 _144p24fps.mp4"; filename*=utf-8''1%EC%8B%9C...설명서_144p24fps.mp4
curl -OJ 저장: "1 DJI 5 _144p24fps.mp4" (예전엔 "099fe812f033")
```
- ✅ 최신 브라우저(Chrome/Edge/Firefox)는 filename* 우선 → "1시간으로 끝내는 DJI 미니 5 프로 사용 설명서_144p24fps.mp4" 전체 한글 제목으로 저장
- ✅ filename*를 못 읽는 클라이언트도 읽을 수 있는 ASCII 이름으로 저장 (작업 id 아님)