服务器端未收到 Flutter POST 请求

问题描述 投票:0回答:1

尝试使用 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()
flutter dart flask http-post
1个回答
0
投票

我可以在给定的代码中看到一些问题。

  1. 如果您在 Android 模拟器上运行应用程序,并且在笔记本电脑/PC 上运行 Flask 服务器,则无法使用

    127.0.0.1
    访问 API。 Android 模拟器使用
    10.0.2.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());
   },
   // ...
)

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.