如何读取Python Flask服务器HTTP 200响应内容并保存图片?
解决Flask send_file返回图片后客户端保存的问题
我懂你现在的处境——用Flask的send_file返回图片,客户端用requests请求后拿到了200响应,但response.text返回的是类似乱码的字节字符串,想把这张图片正常保存到本地对吧?核心问题出在二进制数据的处理方式上,下面给你一步步解决:
服务器端代码优化(可选但更规范)
你的现有代码能跑,但建议明确指定图片的MIME类型,让响应头更标准,避免客户端识别歧义:
from flask import Flask, send_file app = Flask(__name__) @app.route("/ss", methods=["POST"]) def ss(): # 明确指定JPG图片的MIME类型 return send_file("chap.jpg", attachment_filename="chap.jpg", mimetype="image/jpeg")
客户端正确保存文件的代码
别用response.text处理图片!图片是二进制数据,得用response.content获取原始字节流,再以二进制写入模式保存:
import requests # 假设你的payload和请求URL是正确的(这里补全了本地服务的典型地址) payload = {"image": image} r = requests.post("http://127.0.0.1:5000/ss", data=payload) # 先校验响应状态确保请求成功 if r.status_code == 200: # 用wb模式(二进制写入)把字节流写入文件 with open("saved_chap.jpg", "wb") as f: f.write(r.content) print("图片已成功保存到本地!") else: print(f"请求失败,状态码:{r.status_code}")
为啥之前的方式不行?
response.text是用来处理文本数据的,它会把二进制图片数据强行按文本编码(比如UTF-8)解析,直接破坏了图片的字节结构,所以得到的是乱码字符串。response.content会直接返回服务器响应的原始二进制体,完全保留图片的字节信息,适合直接写入文件。
额外提个小技巧:如果想让客户端(比如浏览器)直接触发下载弹窗,不用手动写保存逻辑,可以在服务器的send_file里加as_attachment=True参数,这样响应头会自动带上下载标识:
return send_file("chap.jpg", attachment_filename="chap.jpg", mimetype="image/jpeg", as_attachment=True)
内容的提问来源于stack exchange,提问作者Unbanned
相关产品推荐
相关产品推荐

