Polish
This commit is contained in:
		
							parent
							
								
									ac1db169a4
								
							
						
					
					
						commit
						a56f735edd
					
				| 
						 | 
				
			
			@ -26,7 +26,7 @@ import java.util.Map;
 | 
			
		|||
import java.util.Optional;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicBoolean;
 | 
			
		||||
import java.util.function.Supplier;
 | 
			
		||||
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import javax.mail.internet.MimeUtility;
 | 
			
		||||
 | 
			
		||||
import org.reactivestreams.Publisher;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,28 +71,18 @@ public class MultipartHttpMessageWriter implements HttpMessageWriter<MultiValueM
 | 
			
		|||
 | 
			
		||||
	private Charset filenameCharset = DEFAULT_CHARSET;
 | 
			
		||||
 | 
			
		||||
	private final DataBufferFactory bufferFactory;
 | 
			
		||||
	private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	public MultipartHttpMessageWriter() {
 | 
			
		||||
		this(new DefaultDataBufferFactory());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public MultipartHttpMessageWriter(DataBufferFactory bufferFactory) {
 | 
			
		||||
		this.partWriters = Arrays.asList(
 | 
			
		||||
				new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly()),
 | 
			
		||||
				new ResourceHttpMessageWriter()
 | 
			
		||||
		);
 | 
			
		||||
		this.bufferFactory = bufferFactory;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public MultipartHttpMessageWriter(List<HttpMessageWriter<?>> partWriters) {
 | 
			
		||||
		this(partWriters, new DefaultDataBufferFactory());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public MultipartHttpMessageWriter(List<HttpMessageWriter<?>> partWriters, DataBufferFactory factory) {
 | 
			
		||||
		this.partWriters = partWriters;
 | 
			
		||||
		this.bufferFactory = factory;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -130,12 +120,17 @@ public class MultipartHttpMessageWriter implements HttpMessageWriter<MultiValueM
 | 
			
		|||
 | 
			
		||||
		byte[] boundary = generateMultipartBoundary();
 | 
			
		||||
 | 
			
		||||
		HttpHeaders headers = outputMessage.getHeaders();
 | 
			
		||||
		headers.setContentType(new MediaType(MediaType.MULTIPART_FORM_DATA,
 | 
			
		||||
		outputMessage.getHeaders().setContentType(new MediaType("multipart", "form-data",
 | 
			
		||||
				Collections.singletonMap("boundary", new String(boundary, StandardCharsets.US_ASCII))));
 | 
			
		||||
 | 
			
		||||
		return Mono.from(inputStream).flatMap(multiValueMap ->
 | 
			
		||||
				outputMessage.writeWith(generateParts(multiValueMap, boundary)));
 | 
			
		||||
		return Mono.from(inputStream).flatMap(map -> {
 | 
			
		||||
 | 
			
		||||
			Flux<DataBuffer> body = Flux.fromIterable(map.entrySet())
 | 
			
		||||
					.concatMap(entry -> encodePartValues(boundary, entry.getKey(), entry.getValue()))
 | 
			
		||||
					.concatWith(Mono.just(generateLastLine(boundary)));
 | 
			
		||||
 | 
			
		||||
			return outputMessage.writeWith(body);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -146,16 +141,13 @@ public class MultipartHttpMessageWriter implements HttpMessageWriter<MultiValueM
 | 
			
		|||
		return MimeTypeUtils.generateMultipartBoundary();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Flux<DataBuffer> generateParts(MultiValueMap<String, ?> map, byte[] boundary) {
 | 
			
		||||
		return Flux.fromIterable(map.entrySet())
 | 
			
		||||
				.concatMap(entry -> Flux
 | 
			
		||||
						.fromIterable(entry.getValue())
 | 
			
		||||
						.concatMap(value -> generatePart(entry.getKey(), value, boundary)))
 | 
			
		||||
				.concatWith(Mono.just(generateLastLine(boundary)));
 | 
			
		||||
	private Flux<DataBuffer> encodePartValues(byte[] boundary, String name, List<?> values) {
 | 
			
		||||
		return Flux.concat(values.stream().map(v ->
 | 
			
		||||
				encodePart(boundary, name, v)).collect(Collectors.toList()));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	private <T> Flux<DataBuffer> generatePart(String name, T value, byte[] boundary) {
 | 
			
		||||
	private <T> Flux<DataBuffer> encodePart(byte[] boundary, String name, T value) {
 | 
			
		||||
 | 
			
		||||
		MultipartHttpOutputMessage outputMessage = new MultipartHttpOutputMessage(this.bufferFactory);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue