类org.springframework.http.codec.multipart.FilePart源码实例Demo

下面列出了怎么用org.springframework.http.codec.multipart.FilePart的API类实例代码及写法,或者点击链接到github查看源代码。


public Mono<ServerResponse> multipartData(ServerRequest request) {
	return request
			.body(BodyExtractors.toMultipartData())
			.flatMap(map -> {
				Map<String, Part> parts = map.toSingleValueMap();
				try {
					assertEquals(2, parts.size());
					assertEquals("foo.txt", ((FilePart) parts.get("fooPart")).filename());
					assertEquals("bar", ((FormFieldPart) parts.get("barPart")).value());
				}
				catch(Exception e) {
					return Mono.error(e);
				}
				return ServerResponse.ok().build();
			});
}
 

@SaveAction
@PostMapping("/upload")
@SneakyThrows
public Mono<String> upload(@RequestPart("file") Part part) {

    if (part instanceof FilePart) {
        return (part)
                .content()
                .collectList()
                .flatMap(all -> Mono.fromCallable(() ->
                        Base64.encodeBase64String(StreamUtils.copyToByteArray(factory.join(all).asInputStream()))))
                ;
    } else {
        return Mono.error(() -> new IllegalArgumentException("[file] part is not a file"));
    }

}
 

public static SerializableAccessLog of(AccessLoggerInfo info) {
    SerializableAccessLog accessLog = FastBeanCopier.copy(info, new SerializableAccessLog(), "parameters", "method", "target", "exception");
    accessLog.setMethod(info.getMethod().getName());
    accessLog.setTarget(info.getTarget().getName());
    accessLog.setException(info.getException() == null ? ""
            : StringUtils.throwable2String(info.getException()));
    Map<String, Object> newParameter = info.getParameters()
            .entrySet()
            .stream()
            .collect(Collectors.toMap(Map.Entry::getKey, e -> {
                Object value = e.getValue();
                if (value instanceof FilePart) {
                    return ("file:") + ((FilePart) value).filename();
                }
                return JSON.toJSONString(value);
            }));

    accessLog.setParameters(newParameter);
    return accessLog;
}
 

public Mono<ServerResponse> multipartData(ServerRequest request) {
	return request
			.body(BodyExtractors.toMultipartData())
			.flatMap(map -> {
				Map<String, Part> parts = map.toSingleValueMap();
				try {
					assertEquals(2, parts.size());
					assertEquals("foo.txt", ((FilePart) parts.get("fooPart")).filename());
					assertEquals("bar", ((FormFieldPart) parts.get("barPart")).value());
				}
				catch(Exception e) {
					return Mono.error(e);
				}
				return ServerResponse.ok().build();
			});
}
 

@PostMapping("/requestPart")
void requestPart(
		@RequestPart FormFieldPart fieldPart,
		@RequestPart("fileParts") FilePart fileParts,
		@RequestPart("fileParts") Mono<FilePart> filePartsMono,
		@RequestPart("fileParts") Flux<FilePart> filePartsFlux,
		@RequestPart("jsonPart") Person person,
		@RequestPart("jsonPart") Mono<Person> personMono) {

	assertEquals("fieldValue", fieldPart.value());
	assertEquals("fileParts:foo.txt", partDescription(fileParts));
	assertEquals("Jason", person.getName());

	StepVerifier.create(partFluxDescription(filePartsFlux))
			.consumeNextWith(content -> assertEquals("[fileParts:foo.txt,fileParts:logo.png]", content))
			.verifyComplete();

	StepVerifier.create(filePartsMono)
			.consumeNextWith(filePart -> assertEquals("fileParts:foo.txt", partDescription(filePart)))
			.verifyComplete();

	StepVerifier.create(personMono)
			.consumeNextWith(p -> assertEquals("Jason", p.getName()))
			.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 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 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<ServerResponse> parts(ServerRequest request) {
	return request.body(BodyExtractors.toParts()).collectList()
			.flatMap(parts -> {
				try {
					assertEquals(2, parts.size());
					assertEquals("foo.txt", ((FilePart) parts.get(0)).filename());
					assertEquals("bar", ((FormFieldPart) parts.get(1)).value());
				}
				catch(Exception e) {
					return Mono.error(e);
				}
				return ServerResponse.ok().build();
			});
}
 

@PostMapping("/requestPart")
void requestPart(@RequestPart FormFieldPart fieldPart,
		@RequestPart("fileParts") FilePart fileParts,
		@RequestPart("jsonPart") Mono<Person> personMono) {

	assertEquals("fieldValue", fieldPart.value());
	assertEquals("fileParts:foo.txt", partDescription(fileParts));

	StepVerifier.create(personMono)
			.consumeNextWith(p -> assertEquals("Jason", p.getName()))
			.verifyComplete();
}
 

private void assertFooPart(Part part) {
	assertEquals("fooPart", part.name());
	assertTrue(part instanceof FilePart);
	assertEquals("foo.txt", ((FilePart) part).filename());

	StepVerifier.create(DataBufferUtils.join(part.content()))
			.consumeNextWith(buffer -> {
				assertEquals(12, buffer.readableByteCount());
				byte[] byteContent = new byte[12];
				buffer.read(byteContent);
				assertEquals("Lorem Ipsum.", new String(byteContent));
			})
			.verifyComplete();
}
 
源代码12 项目: springdoc-openapi   文件: HelloController.java

@PostMapping(value = "/files", produces = { MediaType.APPLICATION_JSON_VALUE}, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
@Operation(summary = "files")
public Flux<Void> handleFileUpload(
		@RequestPart("files") @Parameter(description = "files",
				content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE))
				Flux<FilePart> filePartFux) throws IOException {
	File tmp = File.createTempFile("tmp", "");
	return filePartFux.flatMap(filePart -> {
		Path path = Paths.get(tmp.toString() + filePart.filename());
		System.out.println(path);
		return filePart.transferTo(path);
	});
}
 
源代码13 项目: springdoc-openapi   文件: HelloController.java

@Operation(summary = "Parse Resume")
@PostMapping(value = "/parse-resume", produces = { MediaType.APPLICATION_JSON_VALUE }, consumes = {
		MediaType.MULTIPART_FORM_DATA_VALUE })
@ApiResponses({ @ApiResponse(responseCode = "400", description = "Invalid input") })
public Mono<String> parse(
		@RequestPart(name = "resumeFile") @Parameter(description = "Resume file to be parsed", content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE)) FilePart resumeFile) {
	return null;
}
 
源代码14 项目: springdoc-openapi   文件: HelloController.java

@Operation(summary = "Parse Resume")
@PostMapping(value = "/parse-resume", produces = { MediaType.APPLICATION_JSON_VALUE }, consumes = {
		MediaType.MULTIPART_FORM_DATA_VALUE })
@ApiResponses({ @ApiResponse(responseCode = "400", description = "Invalid input") })
public Mono<String> parse(
		@RequestPart(name = "resumeFile") @Parameter(description = "Resume file to be parsed", content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE)) FilePart resumeFile) {
	return null;
}
 

public Mono<ServerResponse> parts(ServerRequest request) {
	return request.body(BodyExtractors.toParts()).collectList()
			.flatMap(parts -> {
				try {
					assertEquals(2, parts.size());
					assertEquals("foo.txt", ((FilePart) parts.get(0)).filename());
					assertEquals("bar", ((FormFieldPart) parts.get(1)).value());
				}
				catch(Exception e) {
					return Mono.error(e);
				}
				return ServerResponse.ok().build();
			});
}
 

private void assertFooPart(Part part) {
	assertEquals("fooPart", part.name());
	assertTrue(part instanceof FilePart);
	assertEquals("foo.txt", ((FilePart) part).filename());

	StepVerifier.create(DataBufferUtils.join(part.content()))
			.consumeNextWith(buffer -> {
				assertEquals(12, buffer.readableByteCount());
				byte[] byteContent = new byte[12];
				buffer.read(byteContent);
				assertEquals("Lorem Ipsum.", new String(byteContent));
			})
			.verifyComplete();
}
 

/**
 * upload handler method, mapped to POST. Like any file upload handler it consumes MULTIPART_FORM_DATA.
 * Produces a JSON respomse
 *
 * @param parts a flux providing all part contained in the MULTIPART_FORM_DATA request
 * @return a flux of results - one element per uploaded file
 */
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public Flux<String> uploadHandler(@RequestBody Flux<Part> parts) {
    return parts
            .filter(part -> part instanceof FilePart) // only retain file parts
            .ofType(FilePart.class) // convert the flux to FilePart
            .flatMap(this::saveFile); // save each file and flatmap it to a flux of results
}
 

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")
				.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")
				.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();
}
 

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")
				.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")
				.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")
				.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")
				.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");
}
 
 类所在包
 类方法
 同包方法