我正在尝试将文件从一台 Flask 服务器 (
Server 1
) 发送到另一台 Flask 服务器 (Server 2
),然后再返回。但是,当文件到达 Server 2
时,request.files
对象看起来为空,导致在尝试访问它时出现 KeyError。
这是我的服务器的基本设置:
服务器1:
from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/test', methods=['POST'])
def test():
file = request.files['file'].read()
print(file)
response = requests.post(url="http://127.0.0.1:5002/test",
headers=request.headers,
files={'file': file}
)
return response.json(), response.status_code
if __name__ == "__main__":
app.run(port=5000)
服务器2:
from flask import Flask, request
app = Flask(__name__)
@app.route('/test', methods=["POST"])
def test():
file = request.files['file'] # <-- KeyError occurs here
print(file)
return 1, 200
if __name__ == "__main__":
app.run(port=5002, debug=True)
这是错误
127.0.0.1 - - [23/Mar/2024 10:09:02] "POST /test HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 1488, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 1466, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 1463, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 872, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 870, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 855, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
File "C:\Users\gratu\Projects\flasktest\app2.py", line 10, in test
file = request.files['file']
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\werkzeug\datastructures\structures.py", line 192, in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'file'
当文件从
Server 1
发送到 Server 2
时,request.files
上的 Server 2
对象显示为空,从而导致 KeyError。我已经确认文件已从 Server 1
正确发送,因为我可以在打印时看到 request.files 字典以及我发送的文件。
我不确定为什么
request.files
对象在 Server 2
上是空的。我的设置或代码中缺少什么吗?任何有关如何解决此问题的见解或建议将不胜感激。谢谢!
事实证明问题是在标题上传递的。当我删除标题后,它开始正常工作。
from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/test', methods=['POST'])
def test():
file = request.files['file'].read()
print(file)
response = requests.post(url="http://127.0.0.1:5002/test",
files={'file': file}
)
return response.json(), response.status_code
if __name__ == "__main__":
app.run(port=5000)