서버의 디스크 공간을 사용하지 않는 신개?념 이미지 공유 api
import base64
import zstd
from fastapi import FastAPI, File, UploadFile, Request, HTTPException, Response
from fastapi.responses import PlainTextResponse
app = FastAPI()
def get_media_type_from_bytes(data: bytes) -> str:
if data.startswith(b'\x89PNG\r\n\x1a\n'): return 'image/png'
if data.startswith(b'\xff\xd8'): return 'image/jpeg'
if data.startswith(b'GIF87a') or data.startswith(b'GIF89a'): return 'image/gif'
if data.startswith(b'RIFF') and data[8:12] == b'WEBP': return 'image/webp'
return 'application/octet-stream'
@app.post("/upload",
summary="이미지를 압축 후 URL-Safe Base64로 인코딩",
response_class=PlainTextResponse)
async def upload_safe_image(request: Request, file: UploadFile = File(...)):
image_bytes = await file.read()
compressed_bytes = zstd.compress(image_bytes, 22)
safe_b64_bytes = base64.urlsafe_b64encode(compressed_bytes)
safe_string = safe_b64_bytes.decode("utf-8")
image_url = request.url_for('get_safe_image', safe_string=safe_string)
return PlainTextResponse(content=str(image_url))
@app.get("/i/{safe_string}",
summary="URL-Safe Base64 문자열을 디코딩/압축 해제하여 이미지 제공")
async def get_safe_image(safe_string: str):
try:
b64_bytes = safe_string.encode("utf-8")
compressed_bytes = base64.urlsafe_b64decode(b64_bytes)
decoded_image_bytes = zstd.decompress(compressed_bytes)
except (ValueError, TypeError, zstd.ZstdError) as e:
raise HTTPException(status_code=400, detail=f"잘못된 데이터 형식입니다: {e}")
media_type = get_media_type_from_bytes(decoded_image_bytes)
return Response(content=decoded_image_bytes, media_type=media_type)단점
1
-1
7 comments
aerfeargvaevaaerg
06/17/25 https://github.com/kern/filepizza
이런 것도 있음
comi-soft
06/18/25 Edited 06/18/25텍스트는 디스크 공간을 사용하는가?
binary는 호남선
06/19/25 이거 완전…
https://mdshare060114.web.app/
skajalf
06/20/25 이 이게 뭐임..?
LTS
06/30/25 base64 은근 마니 씀!
fhdrlsntm
07/02/25 ㄱㅅ
nananatsume2
11/27/25 대신 디비를 더 크게 잡아먹고, 디비 데이터 역시 디스크 용량을 잡아먹지. 오히려 파일 스토리지보단 디비가 더 비싼 자원이니까 걍 파일로 저장하는게 낫지 않으려나. 특히 게시물 검색 효율을 떨어뜨리는 문제가 있어서. 게다가 파일은 cdn으로 전송 효율을 올리기도 좋고.
🔐
XSS 2
comi-soft
05/22/25
4980
0
XSS 2
🔐
comi-soft
05/22/25 4980 0
JS
간단한 대사 넘기기
comi-soft
05/22/25
4995
2
간단한 대사 넘기기
JS
comi-soft
05/22/25 4995 2
기타언어
이거슨 코딩인가 아닌가
LTS
05/21/25
3937
0
이거슨 코딩인가 아닌가
기타언어
LTS
05/21/25 3937 0
🔐
XSS
55555
05/21/25
2630
1
XSS
🔐
55555
05/21/25 2630 1
일반
404 Not Found
binary는 호남선
05/21/25
4337
0
404 Not Found
일반
binary는 호남선
05/21/25 4337 0
기타언어
shell도 언어야 언어
ubuntu
05/20/25
3958
0
shell도 언어야 언어
기타언어
ubuntu
05/20/25 3958 0
일반
안녕하세요 코딩에 ㅋ의 한 획도 모르는 뉴비입니다.
yoont
05/20/25
2947
0
안녕하세요 코딩에 ㅋ의 한 획도 모르는 뉴비입니다.
일반
yoont
05/20/25 2947 0
일반
배울래오
firne2300
05/20/25
1804
1
배울래오
일반
firne2300
05/20/25 1804 1
일반
idrive e2 쓰는 사람 있음?
Ghost
05/20/25
1808
0
idrive e2 쓰는 사람 있음?
일반
Ghost
05/20/25 1808 0
🔐
html 삽입 테스트
55555
05/20/25
2227
0
html 삽입 테스트
🔐
55555
05/20/25 2227 0
일반
여기 아직 여러 잔버그 있나보네
로1슈
05/19/25
3162
0
여기 아직 여러 잔버그 있나보네
일반
로1슈
05/19/25 3162 0
일반
오 댓글 API 신기하네
Ghost
05/19/25
3864
0
오 댓글 API 신기하네
일반
Ghost
05/19/25 3864 0
일반
댓글 더 불러오기가 생겼네
Ghost
05/19/25
2484
0
댓글 더 불러오기가 생겼네
일반
Ghost
05/19/25 2484 0
일반
미니 pc가 뒤져버림
Ghost
05/19/25
2266
0
미니 pc가 뒤져버림
일반
Ghost
05/19/25 2266 0
일반
근데 사이트가 진짜 딱 돌아갈 수준의 기능만 만들어두고 오픈했나보네
ㅇㅇ
05/19/25
2901
0
근데 사이트가 진짜 딱 돌아갈 수준의 기능만 만들어두고 오픈했나보네
일반
ㅇㅇ
05/19/25 2901 0
일반
ㅎㅇ AI 개발자임
ㅇㅇ
05/19/25
3377
0
ㅎㅇ AI 개발자임
일반
ㅇㅇ
05/19/25 3377 0
일반
안녕하세요? 코딩 1도 모르는 백수 질문글 입니다!
shashasha
05/18/25
4910
0
안녕하세요? 코딩 1도 모르는 백수 질문글 입니다!
일반
shashasha
05/18/25 4910 0
일반
한명이 여러 서브 못열게 막았네
Ghost
05/18/25
2057
0
한명이 여러 서브 못열게 막았네
일반
Ghost
05/18/25 2057 0
🔐
<script>alert('XSS');</script>
Witch
05/18/25
5841
0
<script>alert('XSS');</script>
🔐
Witch
05/18/25 5841 0
일반
바이브코딩 말고 노예코딩은 없나요?
이다알
05/18/25
1756
0
바이브코딩 말고 노예코딩은 없나요?
일반
이다알
05/18/25 1756 0
🔐
앱이나 웹사이트 API 요청을 리버싱 해서 swagger로 나타내게 해주는 도구
Ghost
05/18/25
2660
0
앱이나 웹사이트 API 요청을 리버싱 해서 swagger로 나타내게 해주는 도구
🔐
Ghost
05/18/25 2660 0
일반
HTML로 코딩해요. 같은 글이 없네
LTS
05/18/25
2396
0
HTML로 코딩해요. 같은 글이 없네
일반
LTS
05/18/25 2396 0
일반
네이버로 가입해서 야짤올리는애들은 뭔깡임?
alalllall
05/18/25
4424
0
네이버로 가입해서 야짤올리는애들은 뭔깡임?
일반
alalllall
05/18/25 4424 0
일반
전공자/비전공자 비율
보성녹차드링커
05/18/25
3306
0
전공자/비전공자 비율
일반
보성녹차드링커
05/18/25 3306 0
일반
Kone 프론트 잠깐 뜯어봤는데
binary는 호남선
05/18/25
6248
4
Kone 프론트 잠깐 뜯어봤는데
일반
binary는 호남선
05/18/25 6248 4
JS
제목/내용/작성자명 검색 시스템
Ghost
05/18/25
4788
2
제목/내용/작성자명 검색 시스템
JS
Ghost
05/18/25 4788 2
JS
댓글 개선 시스템
Ghost
05/17/25
2972
4
댓글 개선 시스템
JS
Ghost
05/17/25 2972 4
일반
우리 학과에는 무서운 괴담이 하나 있다
tommy5801
05/17/25
2731
1
우리 학과에는 무서운 괴담이 하나 있다
일반
tommy5801
05/17/25 2731 1
JS
댓글 알림 시스템
Ghost
05/17/25
5349
3
댓글 알림 시스템
JS
Ghost
05/17/25 5349 3
PY
API 재업
Ghost
05/17/25
4068
2
API 재업
PY
Ghost
05/17/25 4068 2
s/turtleneckers
• 1,620 subscribers프로그래밍 서브입니다. 잡담, 문제 해결, 코드 리뷰(공지 필독)
Created 05/17/2025, 14:30:39
Rules
- 1. 기본 방임주의(절대 귀찮아서 그런 것 맞음)
- 2. 누가봐도 밴 당할법한 글 올리면 자를꺼임
- 3. 카테고리 지켜주면 좋겠지만 안지키면 안타까운거고