我无法通过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);
}
}
答案 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;