【发布时间】:2020-06-17 06:58:43
【问题描述】:
假设 api url 是https://34.35.36.37:8000/api
附件(key = user_image)是.jpg文件
在服务器端(https://34.35.36.37:8000/api):
@app.route('/api', methods=['POST'])
def api():
print("check1")
user_image = request.files['user_image']
print("check2")
return "some text"
但是当我尝试使用烧瓶应用程序发布请求时,其中显示了一个表单以上传图像,然后将其发送到 api url,出现错误
api_url = "https://34.35.36.37:8000/api"
content_type = 'application/json'
headers = {'Content-Type': content_type}
class UploadForm(FlaskForm):
user_image = FileField('Upload an image',validators=[FileAllowed(['jpg', 'png', 'jpeg'], u'Image only!'), FileRequired(u'File was empty!')])
submit = SubmitField('Submit')
@app.route('/', methods=['GET','POST'])
def predict():
form = UploadForm()
if form.validate_on_submit():
payload = {}
files = [
('user_image', form.data['user_image'])
]
#response = requests.post(api_url, data={'user_image': form.data['user_image']}, headers=headers, verify=False)
response = requests.request("POST", api_url, headers=headers, data = payload, files = files, verify=False)
print(response.text)
return 'some text'
return render_template('index.html', form=form)
在服务器端检查时,print('check1') 行被执行但print('check2') 行不被执行。
我认为错误在于以下两行,其中涉及将图像发送到发布请求中的 api url
第 1 行:
files = [
('user_image', form.data['user_image'])
]
第 2 行:
response = requests.request("POST", api_url, headers=headers, data = payload, files = files, verify=False)
【问题讨论】:
-
看起来
files参数将数据作为流发送,您需要做更多的工作来上传文件。查看@gihanchanuka 在stackoverflow.com/questions/22567306/…上的回答 -
@PGHE 问题是邮递员使用文件位置来读取文件 'files = {'user_image': open('C://file.jpg', 'rb')}' 。使用烧瓶表单时有没有办法做到这一点,或者在 POST 请求中使用图像时,我们有没有办法让它在烧瓶和邮递员中都工作?
标签: python api flask python-requests postman