我正在尝试从命令行向我的Flask应用程序发出POST请求,我希望它包含一个图像。但我不知道如何用命令包含它。我只使用字符串作为数据成功。
因此,如果我的POST请求如下所示:
curl -i -H "Content-Type: application/json" -X POST -d '{"username":"user1", "password":"password", "image":##What do I put here?##}' http://localhost:5000/my_app/api/users
我不知道在JSON的image
部分放什么。我在这个问题上标记了烧瓶,因为它可能是关于烧瓶的具体答案。
我想在这里包含一个实际图像,然后在Flask一侧,将图像放在所有上传的应用程序的文件夹中,然后将路径保存到数据库中的图像以供以后访问。但是,要做到这一点,我需要知道如何发送图像。有什么想法吗?
答案 0 :(得分:2)
似乎你在这里混合了一些东西。
从您的示例看来,您似乎想要在JSON对象中上传图像。由于两个原因,通常不好:
开销:图片数据应以可打印字符进行编码,例如:使用base64。这会对数据本身造成巨大的开销,导致JSON解码器速度变慢。
测试:您无法在命令行上使用curl尝试此操作。您应该创建一些命令行实用程序来测试请求。
HTTP了解数据上传。因此,为了在没有上述减速的情况下保留JSON结构,您应该使用字段将图像上载为传统数据上载,并将JSON数据结构的另一个字段上载。
使用curl
可以使用-F
选项实现此目的。
curl -i -Ffiledata=@file.jpg -Fdata='{"username":"user1", "password":"password"}' http://localhost:5000/my_app/api/users
使用上面的命令,您将发送一个HTTP POST,其中包含名为filedata
的文件上传和包含您的'JSON'有效负载的'data`字段,以便在接收视图处理程序中进行解析。
您必须使用2个HTTP字段,因为在HTTP上传中您使用的是multipart
编码。
您正在发送以base64编码的图像内容,但由于数据由应用程序框架解码,因此知道要做什么(JSON解析必须在解析时弄清楚),这样会快得多。