apppublic/appPublic/base64_to_file.py
2025-09-04 17:13:21 +08:00

63 lines
1.4 KiB
Python

import os
import base64
from appPuyblic.uniqueID import getID
def getFilenameFromBase64(base64String) {
// Extract MIME type from data URL
const mimeType = base64String.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/)
ext = ''
if (mimeType && mimeType[1]) {
const mime = mimeType[1]
const mimeToExtension = {
# 图片
"image/jpeg": "jpg",
"image/png": "png",
"image/gif": "gif",
"image/webp": "webp",
"image/bmp": "bmp",
"image/svg+xml": "svg",
"image/x-icon": "ico",
"image/tiff": "tiff",
# 音频
"audio/mpeg": "mp3",
"audio/wav": "wav",
"audio/ogg": "ogg",
"audio/webm": "weba",
"audio/aac": "aac",
"audio/flac": "flac",
"audio/mp4": "m4a",
"audio/3gpp": "3gp",
# 视频
"video/mp4": "mp4",
"video/webm": "webm",
"video/ogg": "ogv",
"video/x-msvideo": "avi",
"video/quicktime": "mov",
"video/x-matroska": "mkv",
"video/3gpp": "3gp",
"video/x-flv": "flv",
}
ext = mimeToExtension.get(mime, '')
}
name = getID()
fname = f'{name}{ext}'
return fname
}
def base64_to_file(base64_string, output_path):
# Remove data URL prefix if present (e.g., "data:image/png;base64,")
if ',' in base64_string:
header, base64_data = base64_string.split(',', 1)
else:
base64_data = base64_string
# Decode Base64 string
binary_data = base64.b64decode(base64_data)
# Write binary data to file
with open(output_path, 'wb') as file:
file.write(binary_data)