Replace imghdr with header check

This commit is contained in:
LeonspaceX
2026-01-31 17:31:53 +08:00
parent b788c04f1d
commit 3660346797

View File

@@ -7,7 +7,6 @@ from sqlalchemy.orm import foreign
import os import os
import uuid import uuid
import json import json
import imghdr
from datetime import datetime from datetime import datetime
app = Flask(__name__) app = Flask(__name__)
@@ -211,6 +210,17 @@ def save_hashtags(tag_type, target_id, hashtopic):
name=tag name=tag
) )
db.session.add(new_tag) db.session.add(new_tag)
def detect_image_type(header: bytes):
if header.startswith(b"\xFF\xD8\xFF"):
return "jpeg"
if header.startswith(b"\x89PNG\r\n\x1a\n"):
return "png"
if header.startswith(b"GIF87a") or header.startswith(b"GIF89a"):
return "gif"
if header.startswith(b"RIFF") and len(header) >= 12 and header[8:12] == b"WEBP":
return "webp"
return None
# --- 用户普通api端点 --- # --- 用户普通api端点 ---
@app.route('/api/settings', methods=['GET']) @app.route('/api/settings', methods=['GET'])
@@ -507,7 +517,7 @@ def upload_pic():
header = file.read(512) header = file.read(512)
file.seek(0) file.seek(0)
detected = imghdr.what(None, header) detected = detect_image_type(header)
ext_map = { ext_map = {
'jpg': 'jpeg', 'jpg': 'jpeg',
'jpeg': 'jpeg', 'jpeg': 'jpeg',