отправка файлов из флаттера в Spring webflux - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь отправить файлы из флаттера с помощью пакета Dio, он отлично работает при отправке одного файла в Spring, но он показывает 400 неверных запросов с несколькими файлами Я использую spring webflux Обратите внимание: я тестировал этот метод с Postman, и он отлично работает Я искал об этом, но мне ничего не помогло

    @PostMapping(value = "/uploadfiles/{type}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseStatus(value = HttpStatus.OK)
public Mono<String> uploadMultipleFile(@RequestPart("files") Flux<FilePart> filePartFlux,
        @PathVariable("type") String type) {
    propertymediaIds = new ArrayList<>();
    Mono<String> then = filePartFlux.flatMap(it -> {
        try {
            Path tempFile = Files.createTempFile("test", it.filename());
            AsynchronousFileChannel channel = AsynchronousFileChannel.open(tempFile, StandardOpenOption.WRITE);
            DataBufferUtils.write(it.content(), channel, 0).doOnComplete(() -> {
            }).subscribe();
            try {
                File f = tempFile.toFile();
                byte[] bArray = Files.readAllBytes(f.toPath());
                Propertymedia propertymedia = new Propertymedia();
                propertymedia.setBlob(bArray);
                propertymedia.setBlobContentType(type);
                Mono<ResponseEntity<Propertymedia>> savedpropertymedia = createPropertymedia(propertymedia);
                Mono<String> id = savedpropertymedia.map(user -> user.getBody().getId());
                id.subscribe(v -> {
                    System.out.println(v);
                    if (v != null) {
                        this.propertymediaIds.add(v);
                        System.out.println(this.propertymediaIds);
                    }
                });
            } catch (URISyntaxException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        return Mono.just(propertymediaIds);
    }).then(Mono.just("OK"));
    return then;
}

это для загрузки изображения

Future<void> loadAssets() async {
List<Asset> resultList = List<Asset>();

List<File> fikles = List<File>();
String error = 'No Error Detected';
try {
  resultList = await MultiImagePicker.pickImages(
    maxImages: 6,
    enableCamera: true,
    selectedAssets: images,
    cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"),
    materialOptions: MaterialOptions(
      actionBarColor: "#abcdef",
      actionBarTitle: "Example App",
      allViewTitle: "All Photos",
      useDetailsView: false,
      selectCircleStrokeColor: "#000000",
    ),
  );

  for (Asset i in resultList) {
    File f = new File(i.getByteData().toString());
    print(f.path);
  }
} on Exception catch (e) {
  error = e.toString();
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;

setState(() {
  images = resultList;
  _error = error;
});

}

это для отправки изображения в весну

Future<File> uploadImage() async {
try {
  List<MultipartFile> multipart = List<MultipartFile>();
  for (int i = 0; i < images.length; i++) {
    var path =
        await FlutterAbsolutePath.getAbsolutePath(images[i].identifier);
    multipart.add(
        await MultipartFile.fromFile(path, filename: 'myfile${i}.jpg'));
  }
  FormData imageFormData = FormData.fromMap({
    "files": multipart,
  });
  print('Bearer ' + _userService.token);
  Response response =
      await Dio().post("http://10.0.2.2:8080/api/uploadfiles/image",
          options: Options(headers: {
            "Authorization": 'Bearer ' + _userService.token,
            'content-type': 'multipart/form-data'
          }),
          data: imageFormData);
  print("File upload response: $response");
  print('done');
} catch (e) {
  print("Exception Caught: $e");
}

}

введите описание изображения здесь

...