如何读取从curl发送到Flask的文件?

时间:2016-07-20 01:50:23

标签: python curl flask

Flask code -

 @app.route('/messages', methods = ['POST'])
 def api_message():

    if request.headers['Content-Type'] == 'text/plain':
       return "Text Message: " + request.data

    elif request.headers['Content-Type'] == 'application/json':
        f = open(filename,'r')
        l = f.readlines()
        f.close()
        return len(l)

在跑步时,我收到错误 -

curl -H  "Content-Type:application/json" -X POST http://127.0.0.1:5000/messages --data filename=@hello.json 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

我是否访问了curl param错误(文件名)?或者我以错误的方式发送文件?

另外Upload a file to a python flask server using curl

尝试做

   f = request.files['filename'] 

仍然,同样的错误。

1 个答案:

答案 0 :(得分:2)

您的curl命令代码正在执行的操作是读取文件hello.json并将其放入请求正文中。 (如果您需要将大量JSON发送到服务器,此功能实际上非常有用。)

通常在application/json请求中,您将JSON作为请求的正文发送,因此可能您想要的内容。您可以使用request.get_json将此数据作为Python字典获取。

如果您要上传实际文件(例如上传图片),您需要多部分表单编码,告诉curl通过-F参数发送。 (另见:SO答案:https://stackoverflow.com/a/12667839/224334)。