尝试使用 HTTP POST 请求将图像从 Flutter 应用程序发送到 python Flask 项目,但服务器日志未记录任何发出的 POST 请求。
Flutter 客户端代码正在发出这样的 POST 请求
ElevatedButton(
onPressed: () async {
final ImagePicker _picker = ImagePicker();
var image = await ImagePicker().pickImage(source: ImageSource.gallery);
File file = File(image!.path);
var request = http.MultipartRequest('POST', Uri.parse('http://127.0.0.1:5000/'));
request.files.add(await http.MultipartFile.fromPath('imagefile', file.path));
var data = await request.send;
print("request: " + request.toString());
当我运行时,这会打印到控制台
flutter: request: POST http://127.0.0.1:5000/
但是在服务器端日志 Flask 没有收到 POST 请求。日志看起来像这样
127.0.0.1 - - [25/Apr/2024 11:51:14] "GET / HTTP/1.1" 405 -
Flask 服务器端代码如下所示
@app.route("/", methods=['POST'])
def home():
if 'imagefile' not in request.files:
return 'File Not Found'
try:
imagefile = request.files.get['imagefile']
if imagefile.filename == '':
return 'No File Selected'
# image manipulation code that i don't think is relevent to the issue
return 'Done'
except Exception as e:
return f'Error: {e}'
if __name__ == '__main__':
app.run()
我可以在给定的代码中看到一些问题。
如果您在 Android 模拟器上运行应用程序,并且在笔记本电脑/PC 上运行 Flask 服务器,则无法使用
127.0.0.1
访问 API。 Android 模拟器使用 10.0.2.2
指向本地主机。
您确定要调用
request.send
方法吗?下面这行只是作为发送方法的引用,它似乎没有调用/调用发送方法。
var data = await request.send;
这是代码的更正版本:
ElevatedButton(
onPressed: () async {
final ImagePicker _picker = ImagePicker();
var image = await ImagePicker().pickImage(source: ImageSource.gallery);
File file = File(image!.path);
var request = http.MultipartRequest('POST', Uri.parse('http://10.0.2.2:5000/'));
request.files.add(await http.MultipartFile.fromPath('imagefile', file.path));
var data = await request.send();
print("request: " + request.toString());
},
// ...
)
希望这有帮助:)