Python 邮递员发出的邮件请求有效,但不在瓶子中
假设api url为 已从邮递员应用发送一个POST请求,该请求已成功 附加文件(key=user\u image)是一个.jpg文件 在服务器端(): 但是,当我使用flask应用程序尝试post请求时,其中显示了一个表单以上载图像,然后将图像发送到api url,出现了一个错误Python 邮递员发出的邮件请求有效,但不在瓶子中,python,api,flask,python-requests,postman,Python,Api,Flask,Python Requests,Postman,假设api url为 已从邮递员应用发送一个POST请求,该请求已成功 附加文件(key=user\u image)是一个.jpg文件 在服务器端(): 但是,当我使用flask应用程序尝试post请求时,其中显示了一个表单以上载图像,然后将图像发送到api url,出现了一个错误 api_url = "https://34.35.36.37:8000/api" content_type = 'application/json' headers = {'Content-Type': con
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')
我认为错误在于以下两行,这两行涉及在post请求中将图像发送到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)
上面的代码对我有用。这相当于在“Body”部分中选择一个带有键“user\u image”的文件后,从邮递员处发送一个“POST”请求。请勿在post请求response=requests.post(api\u url,files=files)中使用任何标题
在服务器端(api_url),可以通过user\u image=request接收文件。files['user\u image']
看起来像files
参数将数据作为流发送,您需要做更多的工作来上传文件。查看@gihanchanuka在@PGHE上的回答问题是邮递员使用文件位置读取文件'files={'user_image':open('C://file.jpg','rb')}。当使用flask表单或在POST请求中使用图像时,是否有办法做到这一点,我们是否无法使它在flask和postman中都工作?
response = requests.request("POST", api_url, headers=headers, data = payload, files = files, verify=False)
api_url = "https://34.35.36.37:8000/api"
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():
file_uploaded = request.files['user_image']
files = {'user_image': (file_uploaded.filename, file_uploaded.read())}
response = requests.post(api_url, files = files)
return 'some text'
return render_template('index.html', form=form)