目前我有一个简单的 Flask 服务器,一旦用户点击/
端点,它就会呈现一个 HTML 表单,她可以在其中选择要上传的图像。单击“提交”后,服务器将图像作为 POST 请求接收,对其执行一些处理并返回带有结果分析的 JSON,例如:
{
"status": "ok",
"coins found": 10
}
从浏览器一切正常。我什至设法使用 Postman 绕过表单填写阶段,将 POST 请求直接发送到附有图像的服务器,并得到预期的响应。
在下一阶段,我想看看改变我的图像处理管道将如何影响服务器吞吐量。为此,我打算使用Vegeta,现在我需要将我的有效负载作为文本文件,这样我就可以告诉 Vegeta 如何创建请求以执行其攻击。
我真正想知道的是以下内容:“如何将 jpg 图像存储在纯文本文件中,以便 vegeta 可以将其拾取并由 Flask 服务器正确解码”。
现在我已经尝试读取图像,将字节流编码为 base64 并将其存储在文件中,例如:
------xx
Content-Disposition: form-data; name="image"; filename="sweden-swedish-flag-national-cycling-jersey.jpg"
Content-Type: image/jpeg
/9j/4AAQSkZJRgABAQEASABIAAD...
------xx--
但是 Flask 应用程序无法打开图像并出现以下错误:OSError: cannot identify image file <_io.BytesIO object at 0x12c17bc50>
.
为了完整起见,这是我用来打开图像的代码,并且对于来自浏览器和 Postman 的请求可以正常工作:
import io
from PIL import Image
bytestream = io.BytesIO(request.files['image'])
image = Image.open(bytestream)