要在 Flask 中创建一个接收 Base64 格式图片的接口,你需要以下步骤:
- 创建一个 Flask 应用。
- 定义一个接收 POST 请求的路由。
- 在请求中解析 Base64 编码的图片数据。
- 将 Base64 数据解码为二进制数据,并保存到文件(可选)。
以下是一个示例代码,展示了如何实现这一功能:
from flask import Flask, request, jsonify
import base64
import osapp = Flask(__name__)# 定义保存图片的目录
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):os.makedirs(UPLOAD_FOLDER)@app.route('/upload_image', methods=['POST'])
def upload_image():try:# 从请求中获取JSON数据data = request.get_json()# 验证数据中包含'image'字段if 'image' not in data:return jsonify({'error': 'No image data provided'}), 400# 获取Base64编码的图片数据image_base64 = data['image']# 去掉可能的头部信息(如:data:image/png;base64,)if ',' in image_base64:image_base64 = image_base64.split(',')[1]# 将Base64数据解码为二进制数据image_data = base64.b64decode(image_base64)# 定义保存图片的文件名(这里使用UUID保证唯一性,你也可以根据需要修改)import uuidfile_name = f"{uuid.uuid4()}.png"file_path = os.path.join(UPLOAD_FOLDER, file_name)# 将二进制数据写入文件with open(file_path, 'wb') as file:file.write(image_data)return jsonify({'message': 'Image uploaded successfully', 'file_name': file_name}), 201except Exception as e:return jsonify({'error': str(e)}), 500if __name__ == '__main__':app.run(debug=True)
解释
- 创建 Flask 应用:使用
Flask(__name__)
创建一个 Flask 应用实例。 - 定义保存图片的目录:设置
UPLOAD_FOLDER
变量为保存图片的目录,并在目录不存在时创建它。 - 定义路由:使用
@app.route('/upload_image', methods=['POST'])
定义一个处理 POST 请求的路由。 - 解析 Base64 数据:
- 从请求中获取 JSON 数据。
- 验证 JSON 数据中包含
image
字段。 - 去掉可能的 Base64 头部信息(如
data:image/png;base64,
)。 - 使用
base64.b64decode
将 Base64 数据解码为二进制数据。
- 保存图片:
- 生成一个唯一的文件名(使用
uuid
)。 - 将二进制数据写入文件。
- 生成一个唯一的文件名(使用
- 返回响应:
- 如果上传成功,返回包含成功消息和文件名的 JSON 响应。
- 如果出现异常,返回包含错误信息的 JSON 响应。
测试
你可以使用 curl
或 Postman 来测试这个接口。例如,使用 curl
发送一个包含 Base64 编码图片的 POST 请求:
curl -X POST http://127.0.0.1:5000/upload_image \
-H "Content-Type: application/json" \
-d '{"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}'
请确保将 data:image/png;base64,...
替换为实际的 Base64 编码图片数据。