Flask-Ajax多用户请求时生成独立本地JPG文件的实现方案
解决Flask路由每次保存独立图片文件的问题
你的代码目前固定使用decoded_image.jpeg作为文件名,每次请求都会覆盖之前的文件。要实现每次访问生成独立文件,核心是生成唯一的文件名,下面给两种简单可靠的实现方式:
方法一:用UUID生成唯一文件名
UUID(通用唯一识别码)能生成几乎不会重复的字符串,适合用来做唯一文件名。
修改后的完整代码:
from flask import Flask, request import base64 import uuid app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'GET': text = request.args.get("image") if not text: # 增加空值判断,避免无图片数据时报错 return "No image data received", 400 # 生成无横杠的UUID作为文件名前缀 unique_filename = f"{uuid.uuid4().hex}.jpeg" base64_img_bytes = text.encode('utf-8') with open(unique_filename, 'wb') as file_to_save: decoded_image_data = base64.decodebytes(base64_img_bytes) file_to_save.write(decoded_image_data) return f"Image saved as {unique_filename}"
方法二:用时间戳生成唯一文件名
利用当前精确到微秒的时间戳作为文件名,确保每次请求的文件名都不同,还能直观看出文件生成时间。
修改后的完整代码:
from flask import Flask, request import base64 import datetime app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'GET': text = request.args.get("image") if not text: # 增加空值判断,避免无图片数据时报错 return "No image data received", 400 # 生成带微秒的时间戳文件名 timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') unique_filename = f"{timestamp}.jpeg" base64_img_bytes = text.encode('utf-8') with open(unique_filename, 'wb') as file_to_save: decoded_image_data = base64.decodebytes(base64_img_bytes) file_to_save.write(decoded_image_data) return f"Image saved as {unique_filename}"
补充说明
- 两种方法都能避免文件覆盖:UUID适合需要绝对唯一标识的场景,时间戳则兼顾唯一性和可追溯性。
- 新增的空值判断能避免前端未传
image参数时,后续代码出现异常。 - 确保Flask应用所在目录有文件写入权限,否则会保存失败。
内容的提问来源于stack exchange,提问作者Sahil Tariq
相关产品推荐
相关产品推荐

