gpt4 book ai didi

Python - flask.request.files.stream 应该是什么类型?

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:45 25 4
gpt4 key购买 nike

在 Flask(通过 pip 安装的 Flask-0.10.1)中,我尝试像这样处理上传的文件

f = flask.request.files[input_name]
stream = f.stream
# then use the stream

但令人困惑的是,在某些情况下 stream 是一个 BytesIO 实例,但也有可能是一个 file 对象。

我是这样测试的

from flask import Flask, request
import cStringIO

app = Flask('test')

@app.route("/", methods=['POST'])
def index():
if request.method == 'POST':
f = request.files['file']
print type(f.stream)

def send_file(client, name):
with open(name, 'rb') as f:
client.post('/', data={'file': (cStringIO.StringIO(f.read()), name)})

if __name__ == "__main__":
with app.test_client() as client:
send_file(client, 'homercat.png')
send_file(client, 'megacat-2.png')

打印

<type '_io.BytesIO'>
<type 'file'>

PNG文件来自github:

http://octodex.github.com/images/homercat.png http://octodex.github.com/images/megacat-2.png

我想知道为什么 Flask 会这样。如果我想让上传的数据进入数据库,在这两种情况下都可以调用f.stream.read()吗?

最佳答案

小于 1024 * 500 字节的文件将写入 StringIO 对象,而大于该阈值的文件将写入临时文件。

它是 Werkzeug 测试框架的一部分,但该函数不是在线文档的一部分:

def stream_encode_multipart(values, use_tempfile=True, threshold=1024 * 500,
boundary=None, charset='utf-8'):
"""Encode a dict of values (either strings or file descriptors or
:class:`FileStorage` objects.) into a multipart encoded string stored
in a file descriptor.
"""

...

Source

关于Python - flask.request.files.stream 应该是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18246309/

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