【发布时间】:2013-08-15 04:25:07
【问题描述】:
在 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()吗?
【问题讨论】:
标签: python file-upload flask python-2.x