Python-flask.request.files.stream应该是什么类型?
在Flask(Flask-0.10.1通过pip安装)中,我尝试过处理像这样上传的文件Python-flask.request.files.stream应该是什么类型?,python,file-upload,flask,python-2.x,Python,File Upload,Flask,Python 2.x,在Flask(Flask-0.10.1通过pip安装)中,我尝试过处理像这样上传的文件 f = flask.request.files[input_name] stream = f.stream # then use the stream 但令人困惑的是,在某些情况下,stream是一个BytesIO实例,但也可能是一个文件对象 我是这样测试的 from flask import Flask, request import cStringIO app = Flask('test') @ap
f = flask.request.files[input_name]
stream = f.stream
# then use the stream
但令人困惑的是,在某些情况下,stream
是一个BytesIO
实例,但也可能是一个文件
对象
我是这样测试的
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:
我想知道为什么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.
"""
...
我从这个要点中学到了这一点,当我交换元组中的项时,它会引发异常。