- 발표자료(좌표투영·측점기반재생) 갱신 + 그림/PDF - 특허 출원 초안 및 도면 - AI 영상요약 서비스 작업기록(docs/history) - 관련 scripts 추가 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 lines
1.8 KiB
Markdown
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 아님)
|