[ https://issues.apache.org/jira/browse/FLINK-9599?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16519617#comment-16519617 ]
ASF GitHub Bot commented on FLINK-9599: --------------------------------------- Github user tillrohrmann commented on a diff in the pull request: https://github.com/apache/flink/pull/6189#discussion_r197217551 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/rest/RestClient.java --- @@ -239,6 +322,45 @@ public void shutdown(Time timeout) { return responseFuture; } + private interface Request { + void writeTo(Channel channel) throws IOException; + } + + private static final class SimpleRequest implements Request { + private final HttpRequest httpRequest; + + SimpleRequest(HttpRequest httpRequest) { + this.httpRequest = httpRequest; + } + + @Override + public void writeTo(Channel channel) { + channel.writeAndFlush(httpRequest); + } + } + + private static final class MultipartRequest implements Request { + private final HttpRequest httpRequest; + private final HttpPostRequestEncoder bodyRequestEncoder; + + MultipartRequest(HttpRequest httpRequest, HttpPostRequestEncoder bodyRequestEncoder) { + this.httpRequest = httpRequest; + this.bodyRequestEncoder = bodyRequestEncoder; + } + + @Override + public void writeTo(Channel channel) { + channel.writeAndFlush(httpRequest); + // this should never be false as we explicitly set the encoder to use multipart messages + if (bodyRequestEncoder.isChunked()) { + channel.writeAndFlush(bodyRequestEncoder); + } + + // release data and remove temporary files if they were created + bodyRequestEncoder.cleanFiles(); + } + } --- End diff -- Nice, this looks now really sleek 👍 > Implement generic mechanism to receive files via rest > ----------------------------------------------------- > > Key: FLINK-9599 > URL: https://issues.apache.org/jira/browse/FLINK-9599 > Project: Flink > Issue Type: New Feature > Components: REST > Reporter: Chesnay Schepler > Assignee: Chesnay Schepler > Priority: Major > Labels: pull-request-available > Fix For: 1.6.0 > > > As a prerequisite for a cleaner implementation of FLINK-9280 we should > * extend the RestClient to allow the upload of Files > * extend FileUploadHandler to accept mixed multi-part requests (json + files) > * generalize mechanism for accessing uploaded files in {{AbstractHandler}} > Uploaded files can be forwarded to subsequent handlers as an attribute, > similar to the existing special case for the {{JarUploadHandler}}. The JSON > body can be forwarded by replacing the incoming http requests with a simple > {{DefaultFullHttpRequest}}. > Uploaded files will be retrievable through the {{HandlerRequest}}. > I'm not certain if/how we can document that a handler accepts files. -- This message was sent by Atlassian JIRA (v7.6.3#76005)