private long calcMultipartFormDataBodyLength(final MultipartFormData<?> multipartFormData) { final String boundaryToContentTypeStart = MultipartFormatter.boundaryToContentType(""); final String boundary = getHeaders().get(HeaderNames.CONTENT_TYPE) .filter(ct -> ct.startsWith(boundaryToContentTypeStart)) .map(ct -> "\r\n--" + ct.substring(boundaryToContentTypeStart.length())) .orElseThrow(() -> new RuntimeException(("Content-Type header starting with \"" + boundaryToContentTypeStart + "\" needs to be present"))); long dataSizeSum = multipartFormData.asFormUrlEncoded().entrySet().stream().mapToLong(dataPart -> Arrays.stream(dataPart.getValue()).mapToLong(value -> partLength(boundary, "form-data", dataPart.getKey() + (dataPart.getValue().length > 1 ? "[]" : ""), null, null, value) ).sum()).sum(); long fileHeadersSizeSum = multipartFormData.getFiles().stream() .mapToLong(filePart -> // Pass empty body because we add the file size sum later instead anyway (see next assignment below) partLength(boundary, filePart.getDispositionType(), filePart.getKey(), filePart.getFilename(), filePart.getContentType(), "") ).sum(); long fileSizeSum = multipartFormData.getFiles().stream().mapToLong(filePart -> filePart.getFileSize()).sum(); long length = dataSizeSum + fileHeadersSizeSum + fileSizeSum; if(length > 0) { // Remove trailing "\r\n" from first boundary length -= 2; // Add last boundary with double dash (--) at the end length += (boundary + "--").getBytes(StandardCharsets.UTF_8).length; } return length; }
private long calcMultipartFormDataBodyLength(final MultipartFormData<?> multipartFormData) { final String boundaryToContentTypeStart = MultipartFormatter.boundaryToContentType(""); final String boundary = getHeaders().get(HeaderNames.CONTENT_TYPE) .filter(ct -> ct.startsWith(boundaryToContentTypeStart)) .map(ct -> "\r\n--" + ct.substring(boundaryToContentTypeStart.length())) .orElseThrow(() -> new RuntimeException(("Content-Type header starting with \"" + boundaryToContentTypeStart + "\" needs to be present"))); long dataSizeSum = multipartFormData.asFormUrlEncoded().entrySet().stream().mapToLong(dataPart -> Arrays.stream(dataPart.getValue()).mapToLong(value -> partLength(boundary, "form-data", dataPart.getKey() + (dataPart.getValue().length > 1 ? "[]" : ""), null, null, value) ).sum()).sum(); long fileHeadersSizeSum = multipartFormData.getFiles().stream() .mapToLong(filePart -> // Pass empty body because we add the file size sum later instead anyway (see next assignment below) partLength(boundary, filePart.getDispositionType(), filePart.getKey(), filePart.getFilename(), filePart.getContentType(), "") ).sum(); long fileSizeSum = multipartFormData.getFiles().stream().mapToLong(filePart -> filePart.getFileSize()).sum(); long length = dataSizeSum + fileHeadersSizeSum + fileSizeSum; if(length > 0) { // Remove trailing "\r\n" from first boundary length -= 2; // Add last boundary with double dash (--) at the end length += (boundary + "--").getBytes(StandardCharsets.UTF_8).length; } return length; }
private long calcMultipartFormDataBodyLength(final MultipartFormData<?> multipartFormData) { final String boundaryToContentTypeStart = MultipartFormatter.boundaryToContentType(""); final String boundary = getHeaders().get(HeaderNames.CONTENT_TYPE) .filter(ct -> ct.startsWith(boundaryToContentTypeStart)) .map(ct -> "\r\n--" + ct.substring(boundaryToContentTypeStart.length())) .orElseThrow(() -> new RuntimeException(("Content-Type header starting with \"" + boundaryToContentTypeStart + "\" needs to be present"))); long dataSizeSum = multipartFormData.asFormUrlEncoded().entrySet().stream().mapToLong(dataPart -> Arrays.stream(dataPart.getValue()).mapToLong(value -> partLength(boundary, "form-data", dataPart.getKey() + (dataPart.getValue().length > 1 ? "[]" : ""), null, null, value) ).sum()).sum(); long fileHeadersSizeSum = multipartFormData.getFiles().stream() .mapToLong(filePart -> // Pass empty body because we add the file size sum later instead anyway (see next assignment below) partLength(boundary, filePart.getDispositionType(), filePart.getKey(), filePart.getFilename(), filePart.getContentType(), "") ).sum(); long fileSizeSum = multipartFormData.getFiles().stream().mapToLong(filePart -> filePart.getFileSize()).sum(); long length = dataSizeSum + fileHeadersSizeSum + fileSizeSum; if(length > 0) { // Remove trailing "\r\n" from first boundary length -= 2; // Add last boundary with double dash (--) at the end length += (boundary + "--").getBytes(StandardCharsets.UTF_8).length; } return length; }
public static Source<ByteString, ?> transform(Source<? super Http.MultipartFormData.Part<Source<ByteString, ?>>, ?> parts, String boundary) { Source<MultipartFormData.Part<akka.stream.scaladsl.Source<ByteString, ?>>, ?> source = parts.map((part) -> { if (part instanceof Http.MultipartFormData.DataPart) { Http.MultipartFormData.DataPart dp = (Http.MultipartFormData.DataPart) part; return (MultipartFormData.Part) new MultipartFormData.DataPart(dp.getKey(), dp.getValue()); } else if (part instanceof Http.MultipartFormData.FilePart) { Http.MultipartFormData.FilePart fp = (Http.MultipartFormData.FilePart) part; if (fp.ref instanceof Source) { Source ref = (Source) fp.ref; Option<String> ct = Option.apply(fp.getContentType()); return (MultipartFormData.Part)new MultipartFormData.FilePart<akka.stream.scaladsl.Source<ByteString, ?>>(fp.getKey(), fp.getFilename(), ct, ref.asScala(), fp.getFileSize(), fp.getDispositionType()); } } throw new UnsupportedOperationException("Unsupported Part Class"); }); return source.via(Multipart.format(boundary, Charset.defaultCharset(), 4096)); }
public static Source<ByteString, ?> transform(Source<? super Http.MultipartFormData.Part<Source<ByteString, ?>>, ?> parts, String boundary) { Source<MultipartFormData.Part<akka.stream.scaladsl.Source<ByteString, ?>>, ?> source = parts.map((part) -> { if (part instanceof Http.MultipartFormData.DataPart) { Http.MultipartFormData.DataPart dp = (Http.MultipartFormData.DataPart) part; return (MultipartFormData.Part) new MultipartFormData.DataPart(dp.getKey(), dp.getValue()); } else if (part instanceof Http.MultipartFormData.FilePart) { Http.MultipartFormData.FilePart fp = (Http.MultipartFormData.FilePart) part; if (fp.ref instanceof Source) { Source ref = (Source) fp.ref; Option<String> ct = Option.apply(fp.getContentType()); return (MultipartFormData.Part)new MultipartFormData.FilePart<akka.stream.scaladsl.Source<ByteString, ?>>(fp.getKey(), fp.getFilename(), ct, ref.asScala(), fp.getFileSize(), fp.getDispositionType()); } } throw new UnsupportedOperationException("Unsupported Part Class"); }); return source.via(Multipart.format(boundary, Charset.defaultCharset(), 4096)); }
public static Source<ByteString, ?> transform(Source<? super Http.MultipartFormData.Part<Source<ByteString, ?>>, ?> parts, String boundary) { Source<MultipartFormData.Part<akka.stream.scaladsl.Source<ByteString, ?>>, ?> source = parts.map((part) -> { if (part instanceof Http.MultipartFormData.DataPart) { Http.MultipartFormData.DataPart dp = (Http.MultipartFormData.DataPart) part; return (MultipartFormData.Part) new MultipartFormData.DataPart(dp.getKey(), dp.getValue()); } else if (part instanceof Http.MultipartFormData.FilePart) { Http.MultipartFormData.FilePart fp = (Http.MultipartFormData.FilePart) part; if (fp.ref instanceof Source) { Source ref = (Source) fp.ref; Option<String> ct = Option.apply(fp.getContentType()); return (MultipartFormData.Part)new MultipartFormData.FilePart<akka.stream.scaladsl.Source<ByteString, ?>>(fp.getKey(), fp.getFilename(), ct, ref.asScala(), fp.getFileSize(), fp.getDispositionType()); } } throw new UnsupportedOperationException("Unsupported Part Class"); }); return source.via(Multipart.format(boundary, Charset.defaultCharset(), 4096)); }
private play.api.mvc.MultipartFormData.FilePart<A> toScala(Http.MultipartFormData.FilePart<A> filePart) { return new play.api.mvc.MultipartFormData.FilePart<>( filePart.getKey(), filePart.getFilename(), Option.apply(filePart.getContentType()), filePart.getFile(), filePart.getFileSize(), filePart.getDispositionType() ); } }
private play.api.mvc.MultipartFormData.FilePart<A> toScala(Http.MultipartFormData.FilePart<A> filePart) { return new play.api.mvc.MultipartFormData.FilePart<>( filePart.getKey(), filePart.getFilename(), Option.apply(filePart.getContentType()), filePart.getFile(), filePart.getFileSize(), filePart.getDispositionType() ); } }
private play.api.mvc.MultipartFormData.FilePart<A> toScala(Http.MultipartFormData.FilePart<A> filePart) { return new play.api.mvc.MultipartFormData.FilePart<>( filePart.getKey(), filePart.getFilename(), Option.apply(filePart.getContentType()), filePart.getFile(), filePart.getFileSize(), filePart.getDispositionType() ); } }