gpt4 book ai didi

python - 如何使用 Flask 测试客户端发布多个文件?

转载 作者:太空狗 更新时间:2023-10-29 20:58:56 26 4
gpt4 key购买 nike

为了测试 Flask 应用程序,我得到了一个带有文件作为附件的 Flask 测试客户端 POSTing 请求

def make_tst_client_service_call1(service_path, method, **kwargs):
_content_type = kwargs.get('content-type','multipart/form-data')
with app.test_client() as client:
return client.open(service_path, method=method,
content_type=_content_type, buffered=True,
follow_redirects=True,**kwargs)

def _publish_a_model(model_name, pom_env):
service_url = u'/publish/'
scc.data['modelname'] = model_name
scc.data['username'] = "BDD Script"
scc.data['instance'] = "BDD Stub Simulation"
scc.data['timestamp'] = datetime.now().strftime('%d-%m-%YT%H:%M')
scc.data['file'] = (open(file_path, 'rb'),file_name)
scc.response = make_tst_client_service_call1(service_url, method, data=scc.data)

处理上述 POST 请求的 Flask 服务器端点代码是这样的

@app.route("/publish/", methods=['GET', 'POST'])
def publish():
if request.method == 'POST':
LOG.debug("Publish POST Service is called...")
upload_files = request.files.getlist("file[]")
print "Files :\n",request.files
print "Upload Files:\n",upload_files
return render_response_template()

我得到了这个输出

Files:
ImmutableMultiDict([('file', <FileStorage: u'Single_XML.xml' ('application/xml')>)])

Upload Files:
[]

如果我改变

scc.data['file'] = (open(file_path, 'rb'),file_name)

into(认为它会处理多个文件)

scc.data['file'] = [(open(file_path, 'rb'),file_name),(open(file_path, 'rb'),file_name1)]

我仍然得到类似的输出:

Files:
ImmutableMultiDict([('file', <FileStorage: u'Single_XML.xml' ('application/xml')>), ('file', <FileStorage: u'Second_XML.xml' ('application/xml')>)])

Upload Files:
[]

问题:为什么 request.files.getlist("file[]") 返回一个空列表?我如何使用 flask 测试客户端发布多个文件,以便可以在 flask 服务器端使用 request.files.getlist("file[]") 检索它?

注意:

  • 我想要 Flask 客户端,我不想要 curl 或任何其他基于客户端的解决方案。
  • 我不想在多个请求中发布单个文件

谢谢

已经引用了这些链接:

Flask and Werkzeug: Testing a post request with custom headers

Python - What type is flask.request.files.stream supposed to be?

最佳答案

您将文件作为名为 file 的参数发送,因此您无法使用名称 file[] 查找它们。如果你想得到所有名为 file 的文件作为一个列表,你应该使用这个:

upload_files = request.files.getlist("file")

另一方面,如果你真的想从 file[] 中读取它们,那么你需要像这样发送它们:

scc.data['file[]'] = # ...

(file[] 语法来自 PHP,仅在客户端使用。当您将这样命名的参数发送到服务器时,您仍然可以使用 $_FILES 访问它们['文件'].)

关于python - 如何使用 Flask 测试客户端发布多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com