将图片上传到后端

时间:2020-06-12 11:29:59

标签: http flutter dart

我无法通过http包将图像上传到我的restAPI服务器。我整天都在寻找答案,却没有找到答案。我的后端需要一个实际的图像,但是我似乎不使用http包来管理它。

  Future<void> createProfile(Profile profile) async {
    try {
      var request =
          new http.MultipartRequest("POST", Uri.parse(APIPath.createProfile()));
      request.fields.addAll(profile.toMap());
      request.files.add(await http.MultipartFile.fromPath(
          'image', profile.image.path,
          contentType: MediaType('image', '*')));
      request.headers['authorization'] = "Bearer $_token";
      final response = await request.send();
      if (response.statusCode == 200) print('Uploaded!');

      notifyListeners();
    } catch (error) {
      throw error;
    }
  }

我的后端是用node.js编写的,并在邮递员中进行了测试,因此后端应该没问题。但是,当我尝试从前端上传图像时,出现错误only images allowed,这意味着该图像未到达服务器(允许的图像类型正确)。请任何帮助表示赞赏

在Node.js中触发错误

const fileFilter = (req, file, cb) => {
   if (file.mimetype === 'image/png' || file.mimetype === 'image/gif' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg') {
      cb(null, true);
   } else {
      const error = new Error('Only images are allowed')
      error.statusCode = 406;
      cb(error);
   }
}

2 个答案:

答案 0 :(得分:1)

因为contentType: MediaType('image', '*')将作为image/*的结果,而与file.mimetype中的node.js不匹配。

答案 1 :(得分:0)

 uri = Uri.parse(url);

 var request = new MultipartRequest("PUT", uri);

 var multipartFile = await MultipartFile.fromPath("package", path);

 //path = filepath 

 request.files.add(multipartFile);

 StreamedResponse response = await request.send();

 return response;