@Test public void createImageShouldWork() { // given Image alphaImage = new Image("1", "alpha.jpg"); Image bravoImage = new Image("2", "bravo.jpg"); given(repository.save(new Image(any(), alphaImage.getName()))).willReturn(Mono.just(alphaImage)); given(repository.save(new Image(any(), bravoImage.getName()))).willReturn(Mono.just(bravoImage)); given(repository.findAll()).willReturn(Flux.just(alphaImage, bravoImage)); FilePart file1 = mock(FilePart.class); given(file1.filename()).willReturn(alphaImage.getName()); given(file1.transferTo(any())).willReturn(Mono.empty()); FilePart file2 = mock(FilePart.class); given(file2.filename()).willReturn(bravoImage.getName()); given(file2.transferTo(any())).willReturn(Mono.empty()); // when Mono<Void> done = imageService.createImage(Flux.just(file1, file2)); // then StepVerifier.create(done) .verifyComplete(); }
@Test public void createImageShouldWork() { // given Image alphaImage = new Image("1", "alpha.jpg"); Image bravoImage = new Image("2", "bravo.jpg"); given(repository.save(new Image(any(), alphaImage.getName()))).willReturn(Mono.just(alphaImage)); given(repository.save(new Image(any(), bravoImage.getName()))).willReturn(Mono.just(bravoImage)); given(repository.findAll()).willReturn(Flux.just(alphaImage, bravoImage)); FilePart file1 = mock(FilePart.class); given(file1.filename()).willReturn(alphaImage.getName()); given(file1.transferTo(any())).willReturn(Mono.empty()); FilePart file2 = mock(FilePart.class); given(file2.filename()).willReturn(bravoImage.getName()); given(file2.transferTo(any())).willReturn(Mono.empty()); // when Mono<Void> done = imageService.createImage(Flux.just(file1, file2)); // then then(done.block()).isNull(); }
@Test public void createImages() { Image alphaImage = new Image("1", "alpha.jpg"); Image bravoImage = new Image("2", "bravo.jpg"); FilePart file1 = mock(FilePart.class); given(file1.filename()).willReturn(alphaImage.getName()); given(file1.transferTo(any())).willReturn(Mono.empty()); FilePart file2 = mock(FilePart.class); given(file2.filename()).willReturn(bravoImage.getName()); given(file2.transferTo(any())).willReturn(Mono.empty()); List<Image> images = imageService .createImage(Flux.just(file1, file2)) .then(imageService.findAllImages().collectList()) .block(Duration.ofSeconds(30)); assertThat(images).hasSize(5); }
public Mono<Void> createImage(Flux<FilePart> files) { return files .log("createImage-files") .flatMap(file -> { Mono<Image> saveDatabaseImage = imageRepository.save( new Image( UUID.randomUUID().toString(), file.filename())) .log("createImage-save"); Mono<Void> copyFile = Mono.just(Paths.get(UPLOAD_ROOT, file.filename()).toFile()) .log("createImage-picktarget") .map(destFile -> { try { destFile.createNewFile(); return destFile; } catch (IOException e) { throw new RuntimeException(e); } }) .log("createImage-newfile") .flatMap(file::transferTo) .log("createImage-copy") .then(Mono.fromRunnable(() -> meterRegistry .summary("files.uploaded.bytes") .record(Paths.get(UPLOAD_ROOT, file.filename()).toFile().length()) )); return Mono.when(saveDatabaseImage, copyFile) .log("createImage-when"); }) .log("createImage-flatMap") .then() .log("createImage-done"); }
public Mono<Void> createImage(Flux<FilePart> files) { return files .log("createImage-files") .flatMap(file -> { Mono<Image> saveDatabaseImage = imageRepository.save( new Image( UUID.randomUUID().toString(), file.filename())) .log("createImage-save"); Mono<Void> copyFile = Mono.just(Paths.get(UPLOAD_ROOT, file.filename()).toFile()) .log("createImage-picktarget") .map(destFile -> { try { destFile.createNewFile(); return destFile; } catch (IOException e) { throw new RuntimeException(e); } }) .log("createImage-newfile") .flatMap(file::transferTo) .log("createImage-copy"); return Mono.when(saveDatabaseImage, copyFile) .log("createImage-when"); }) .log("createImage-flatMap") .then() .log("createImage-done"); }
@PostMapping(API_BASE_PATH + "/images") Mono<Void> create(@RequestPart Flux<FilePart> images) { return images .map(image -> { log.info("We will save " + image + " to a Reactive database soon!"); return image; }) .then(); }
@PostMapping(value = BASE_PATH) public Mono<String> createFile( @RequestPart("file") Flux<FilePart> files, @AuthenticationPrincipal Principal principal) { return imageService.createImage(files, principal) .then(Mono.just("redirect:/")); }
public Mono<Void> createImage(Flux<FilePart> files, Principal auth) { return files .log("createImage-files") .flatMap(file -> { Mono<Image> saveDatabaseImage = imageRepository.save( new Image( UUID.randomUUID().toString(), file.filename(), auth.getName())) .log("createImage-save"); // end::metric-2[] Mono<Void> copyFile = Mono.just(Paths.get(UPLOAD_ROOT, file.filename()).toFile()) .log("createImage-picktarget") .map(destFile -> { try { destFile.createNewFile(); return destFile; } catch (IOException e) { throw new RuntimeException(e); } }) .log("createImage-newfile") .flatMap(file::transferTo) .log("createImage-copy") .then(Mono.fromRunnable(() -> meterRegistry .summary("files.uploaded.bytes") .record(Paths.get(UPLOAD_ROOT, file.filename()).toFile().length()) )); return Mono.when(saveDatabaseImage, copyFile) .log("createImage-when"); }) .log("createImage-flatMap") .then() .log("createImage-done"); }
public Mono<Void> createImage(Flux<FilePart> files) { return files .log("createImage-files") .flatMap(file -> { Mono<Image> saveDatabaseImage = imageRepository.save( new Image( UUID.randomUUID().toString(), file.filename())) .log("createImage-save"); Mono<Void> copyFile = Mono.just( Paths.get(UPLOAD_ROOT, file.filename()) .toFile()) .log("createImage-picktarget") .map(destFile -> { try { destFile.createNewFile(); return destFile; } catch (IOException e) { throw new RuntimeException(e); } }) .log("createImage-newfile") .flatMap(file::transferTo) .log("createImage-copy"); return Mono.when(saveDatabaseImage, copyFile) .log("createImage-when"); }) .log("createImage-flatMap") .then() .log("createImage-done"); }
public Mono<Void> createImage(Flux<FilePart> files) { return files .flatMap(file -> { Mono<Image> saveDatabaseImage = imageRepository.save( new Image( UUID.randomUUID().toString(), file.filename())); Mono<Void> copyFile = Mono.just( Paths.get(UPLOAD_ROOT, file.filename()) .toFile()) .log("createImage-picktarget") .map(destFile -> { try { destFile.createNewFile(); return destFile; } catch (IOException e) { throw new RuntimeException(e); } }) .log("createImage-newfile") .flatMap(file::transferTo) .log("createImage-copy"); return Mono.when(saveDatabaseImage, copyFile); }) .then(); }
@PostMapping(API_BASE_PATH + "/images") Mono<Void> create(@RequestPart Flux<FilePart> images) { Hooks.onOperatorDebug(); return images .map(image -> { log.info("We will save " + image + " to a Reactive database soon!"); return image; }) .then(); }
@PostMapping(value = "", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) Mono<String> uploadSingleFile(@RequestBody Mono<FilePart> part) { FilePart filePart = part .log() .block(); String name = UUID.randomUUID().toString() + "-" + filePart.name(); String contentType = filePart.headers().getContentType().toString(); ObjectId id = this.gridFsTemplate.store(filePart.content().blockFirst().asInputStream(), name, contentType); return Mono.just(id.toString()); }
@RequestMapping(value = "/post", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public Mono<Map<String, Object>> postFormData(@RequestBody Mono<MultiValueMap<String, Part>> parts) { // StringDecoder decoder = StringDecoder.allMimeTypes(true); return parts.flux().flatMap(map -> Flux.fromIterable(map.values())) .flatMap(map -> Flux.fromIterable(map)) .filter(part -> part instanceof FilePart) .reduce(new HashMap<String, Object>(), (files, part) -> { MediaType contentType = part.headers().getContentType(); long contentLength = part.headers().getContentLength(); files.put(part.name(), "data:"+contentType+";base64,"+contentLength); //TODO: get part data return files; }).map(files -> Collections.singletonMap("files", files)); }
@PostMapping(value = BASE_PATH) public Mono<String> createFile(@RequestPart(name = "file") Flux<FilePart> files) { return imageService.createImage(files) .then(Mono.just("redirect:/")); }