Я пытаюсь загрузить изображение из своего приложения Flutter, используя следующий код:
Future<String> saveImage(File image) async {
var stream = new http.ByteStream(DelegatingStream.typed(image.openRead()));
var length = await image.length();
String token = "blah"; //token for authentication
var uri = Uri.parse(url); //I get the URL from some config
Map<String, String> headers = { "Authorization": "Bearer $token", "content-type": "multipart/form-data" };
var request = new http.MultipartRequest("POST", uri);
request.headers.addAll(headers);
var multipartFile = new http.MultipartFile('file', stream, length);
request.files.add(multipartFile);
var response = await request.send();
print(response.statusCode);
response.stream.transform(utf8.decoder).listen((value) {
print(value);
});
}
Но этот запрос не работает на моем сервере с весенней загрузкой со следующей ошибкой:
{"timestamp":1562637369179,"status":400,"error":"Bad Request","exception":"org.springframework.web.multipart.support.MissingServletRequestPartException","message":"Required request part 'file' is not present","path":"/api/v1/user/photo"}
Вот как выглядит мой метод контроллера Java:
@RequestMapping(value = "/photo", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<String> uploadImage(@RequestPart(required = true) @RequestParam("file") MultipartFile image) throws IOException {
}
Я хотел бы отметить, что метод работает, если я использую почтальона для загрузки изображения. Кажется, что-то не так с моим флаттер-кодом.
Спасибо за любую помощь.




Догадаться. Вместо использования конструктора new http.MultipartFile() я использовал этот статический метод:
request.files.add(await http.MultipartFile.fromPath('file', image.path,
contentType: new MediaType('image', imageType)));
В
@RequestPartзначение по умолчанию дляrequiredравноtrue, поэтому вам не нужно упоминать об этом и удалять@RequestParam, вместо этого сделайте это `@RequestPart("file")