如何设置通过 flask_restless 端点上传二进制对象?
How to setup uploading binary objects through flask_restless endpoint?
我正在开发 REST python 应用程序,我选择了 flask_restless
来构建连接到数据库的端点。我想管理的 table 之一是将二进制文件存储为 blob (LargeBinary
)。
不过,我注意到 flask_restless
需要 json 数据才能满足 POST 请求。我尝试将 base64 应用于二进制文件内容并用 json 包装它,但最终 flask_restless
将文件内容作为字符串传递给 sqlalchemy,SQLite 后端抱怨它需要字节输入(这是正确的) .
我尝试在互联网上搜索解决方案,但要么我的查询公式不正确,要么实际上有 none.
那么,有没有办法配置由 flask_restless
管理的端点以接受二进制文件作为附件?或者更确切地说,建议的解决方案是直接使用烧瓶为特定 table 设置端点(我之前在另一个应用程序中做过),远离 flask_restless
?
原来发送附件是不行的。
所以我深入研究了如何发送 base64 编码的附件,这些附件将被保存为 blob。
为此,我使用了 flask_restless
的预处理和 post 处理工具:
def pp_get_single_image(result=None, **kw):
import base64
result['image'] = base64.b64encode(result['image']).decode('utf8')
def pp_get_many_images(result=None, search_params=None, **kw):
result['objects'] = [pp_get_single_image(d) or d for d in result['objects']]
def pp_post_image_in(data=None, **kw):
import base64
data['image'] = base64.b64decode(data['image'])
def pp_post_image_out(result=None, **kw):
import base64
result['image'] = base64.b64encode(result['image']).decode('utf8')
postprocessors=dict(GET_SINGLE=[pp_get_single_image], GET_MANY=[pp_get_many_images], POST=[pp_post_image_out])
preprocessors=dict(POST=[pp_post_image_in])
manager = flask_restless.APIManager(app, flask_sqlalchemy_db=db)
manager.create_api(Image, methods=['GET', 'POST', 'DELETE'],
postprocessors=pp_image.postprocessors,
preprocessors=pp_image.preprocessors)
我正在开发 REST python 应用程序,我选择了 flask_restless
来构建连接到数据库的端点。我想管理的 table 之一是将二进制文件存储为 blob (LargeBinary
)。
不过,我注意到 flask_restless
需要 json 数据才能满足 POST 请求。我尝试将 base64 应用于二进制文件内容并用 json 包装它,但最终 flask_restless
将文件内容作为字符串传递给 sqlalchemy,SQLite 后端抱怨它需要字节输入(这是正确的) .
我尝试在互联网上搜索解决方案,但要么我的查询公式不正确,要么实际上有 none.
那么,有没有办法配置由 flask_restless
管理的端点以接受二进制文件作为附件?或者更确切地说,建议的解决方案是直接使用烧瓶为特定 table 设置端点(我之前在另一个应用程序中做过),远离 flask_restless
?
原来发送附件是不行的。 所以我深入研究了如何发送 base64 编码的附件,这些附件将被保存为 blob。
为此,我使用了 flask_restless
的预处理和 post 处理工具:
def pp_get_single_image(result=None, **kw):
import base64
result['image'] = base64.b64encode(result['image']).decode('utf8')
def pp_get_many_images(result=None, search_params=None, **kw):
result['objects'] = [pp_get_single_image(d) or d for d in result['objects']]
def pp_post_image_in(data=None, **kw):
import base64
data['image'] = base64.b64decode(data['image'])
def pp_post_image_out(result=None, **kw):
import base64
result['image'] = base64.b64encode(result['image']).decode('utf8')
postprocessors=dict(GET_SINGLE=[pp_get_single_image], GET_MANY=[pp_get_many_images], POST=[pp_post_image_out])
preprocessors=dict(POST=[pp_post_image_in])
manager = flask_restless.APIManager(app, flask_sqlalchemy_db=db)
manager.create_api(Image, methods=['GET', 'POST', 'DELETE'],
postprocessors=pp_image.postprocessors,
preprocessors=pp_image.preprocessors)