我正在尝试找到一种方法来保存从 POST 请求中获得的图像,到目前为止,我找到的所有解决方案最终都不起作用,例如,这个。
上述解决方案的问题是我只是得到一个超时错误。
我现在尝试稍微更改代码,但它仍然不起作用,你能帮我吗?
def on_post(self, req, resp):
"""Handles Login POST requests"""
json_data = json.loads(req.bounded_stream.read().decode('utf8'))
base64encoded_image = json_data['image_data']
with open('pic.png', "wb") as fh:
fh.write(b64decode(base64encoded_image))
resp.status = falcon.HTTP_203
resp.body = json.dumps({'status': 1, 'message': 'success'})
我得到的错误是"json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0(">
在你的猎鹰后端
尝试猎鹰多部件
pip3 install falcon-multipart
然后将其作为中间件包含在内。
from falcon_multipart.middleware import MultipartMiddleware
api = falcon.API(middleware=[MultipartMiddleware()])
这将解析任何multipart/form-data
传入的请求,并将键放在req._params
中,包括文件,以便您获得该字段作为其他参数。
# your image directory
refimages_path = "/my-img-dir"
# get incoming file
incoming_file = req.get_param("file")
# create imgid
imgId = str(int(datetime.datetime.now().timestamp() * 1000))
# build filename
filename = imgId + "." + incoming_file.filename.split(".")[-1]
# create a file path
file_path = refimages_path + "/" + filename
# write to a temporary file to prevent incomplete files from being used
temp_file_path = file_path + "~"
with open(temp_file_path, "wb") as f:
f.write(incoming_file.file.read())
# file has been fully saved to disk move it into place
os.rename(temp_file_path, file_path)
<小时 />在您的前端
在请求标头中发送Content-Type: multipart/form-data;
。另外不要忘记提供boundary
因为如RFC2046中所述:
多部分实体的内容类型字段需要一个参数, "边界"。然后,边界分隔符行定义为完全由两个连字符("-",十进制值 45(组成的行
后跟 Content-Type 标头中的边界参数值 字段、可选的线性空格和终止 CRLF。