0

我想将图像上传到 API。我尝试了此代码,但出现错误

文件未找到

如果我使用 Postman 发送图像文件,它会成功运行。在这里我附上了邮递员的截图,上传我给的图片image path,除了我的文件,我想附上用户id请告诉我一个解决方案?谢谢你

这是我的代码

class _UserProfileEditState extends State<UserProfileEdit> {
  // String imagepath='';
  File _profileImage;
  String base64Image;
  DatabaseHelper databaseHelper = new DatabaseHelper();

  int parentid;

  _handleimagefromgallary() async {
    File imagefile = await ImagePicker.pickImage(source: ImageSource.gallery);

    if(imagefile!=null) {
      setState(() {
        _profileImage = imagefile;
      });
    }
 }

 _displayprofilephoto()
 {
    if(_profileImage==null)
    {
      if(widget.parentsInfo.data.photo==null)
      {
        return AssetImage('assets/images/parentimg.png');
      }
      else
      {
        return CachedNetworkImageProvider(widget.parentsInfo.data.photo);
      }
    }
    else
    {
      return FileImage(_profileImage);
    }
  }

@override
  Widget build(BuildContext context) {

     parentid=widget.parentsInfo.data.id;

    return Scaffold(
      appBar: AppBar(
        title: Center(
          child: Text('Edit Profile'),
        ),
      ),
      body: SingleChildScrollView(
          child: Container(
        height: MediaQuery.of(context).size.height * 1.5,
        child: Column(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Center(
                child: Container(
                  height: 160.0,
                  width: 160.0, //MediaQuery.of(context).size.width,
                  child: new CircleAvatar(
                    radius: 50.0,
                    backgroundColor: Colors.green,
                    backgroundImage: _displayprofilephoto(),
                  ),
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(16.0),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Text(''),
                  InkWell(
                    child: Icon(Icons.add_photo_alternate),
                    onTap:_handleimagefromgallary,
                  ),
                ],
              ),
            ),

            showpdatebutton(),

这是上传的方法:

Future _updateprofilepicture() async{
   // _profileImage=await FlutterAbsolutePath.getAbsolutePath(images[i].identifier);
    // var path = await FlutterAbsolutePath.getAbsolutePath(images[i].identifier);
   // var path =await FlutterAbsolutePath.getAbsolutePath(_profileImage.absolute.path);

    var path=await FlutterAbsolutePath.getAbsolutePath(_profileImage.path);

    if(path==null)
      {

      }
    else
      {
          // call controller
        print(path);
        String id=parentid.toString();
        databaseHelper.parentprofileupdate(path, id);
     //   databaseHelper.parentprofileupdate(_profileImage, id);
      }


  }

  Widget showpdatebutton() {
    if(_profileImage!=null)
      {
        return OutlineButton(
            child: Text('Update Profile Picture'),
            onPressed: (){
              _updateprofilepicture();
            }
        );
      }
    else
      {
        return Container();
      }
  }

}

我的数据库助手类:

Future<ParentProfileUpdate> parentprofileupdate(String path,String id) async
    {

      Map mapValue;
      var data;

      final prefs = await SharedPreferences.getInstance();
      final key = 'token';
      final value = prefs.get(key ) ?? 0;



      String myUrl = "$serverUrl/api/v1/upload_parent_image";
      await  http.post(myUrl,
          headers: {

           // 'Accept':'application/json',
            "HttpHeaders.contentTypeHeader": "application/json",
            'Authorization' : 'Bearer $value'

          },
          body: {
                    "photo" :path,
                      "id":id,

          }).then((response) {

        status = response.body.contains('error');
        mapValue=json.decode(response.body);
        var data = json.decode(response.body);

        print(data);

      });
    }

邮递员 http 请求正文

4

0 回答 0