0

我的flask应用程序中有一条这样开始的路线:

@app.route('/invocations', methods=['POST'])
def predict():
    """
    Do an inference on a single batch of data.
    """
    if flask.request.content_type == 'text/csv':
        X_train = flask.request.data.decode('utf-8')
        X_train = pd.read_csv(StringIO(X_train), header=None).values

为了测试这个路径,我从一个包含多行的格式化文件POST向服务器发送一个请求: .csvcurl -X "POST" -H "Content-Type: text/csv" -d @health-check-data.csv http://localhost:5000/invocations

然而,令我惊讶的是,当我执行时X_train = flask.request.data.decode('utf-8'),我将连接的内容csv变成了一个删除换行符的字符串。

为什么flask(或curl?)这样做,我该如何解决这种行为?

4

1 回答 1

2

这只是预期的行为flask.request.data.decode('utf-8')——它返回一个字符串。

您可以将该字符串转换为read_csv可以读取的缓冲区:

upload = flask.request.data.decode('utf-8')
buffer = StringIO()
buffer.write(upload)
buffer.seek(0)
X_train = pd.read_csv(buffer), header=None).values

request.files.get但是,您可以通过返回缓冲区的 Flask 读取 csv 文件来绕过该过程:

X_train = pd.read_csv(request.files.get('name'),  header=None).values
于 2018-12-18T20:36:08.490 回答