[ https://issues.apache.org/jira/browse/FLINK-2978?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15011712#comment-15011712 ]
ASF GitHub Bot commented on FLINK-2978: --------------------------------------- Github user StephanEwen commented on a diff in the pull request: https://github.com/apache/flink/pull/1338#discussion_r45244344 --- Diff: flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/HttpRequestHandler.java --- @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.flink.runtime.webmonitor; + +/***************************************************************************** + * This code is based on the "HttpUploadServerHandler" from the + * Netty project's HTTP server example. + * + * See http://netty.io and + * https://github.com/netty/netty/blob/netty-4.0.31.Final/example/src/main/java/io/netty/example/http/upload/HttpUploadServerHandler.java + *****************************************************************************/ + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpObject; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.LastHttpContent; +import io.netty.handler.codec.http.QueryStringDecoder; +import io.netty.handler.codec.http.QueryStringEncoder; +import io.netty.handler.codec.http.multipart.DefaultHttpDataFactory; +import io.netty.handler.codec.http.multipart.DiskFileUpload; +import io.netty.handler.codec.http.multipart.HttpDataFactory; +import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder; +import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.EndOfDataDecoderException; +import io.netty.handler.codec.http.multipart.InterfaceHttpData; +import io.netty.handler.codec.http.multipart.InterfaceHttpData.HttpDataType; + +import java.io.File; +import java.util.UUID; + +/** + * Simple code which handles all HTTP requests from the user, and passes them to the Router + * handler directly if they do not involve file upload requests. + * If a file is required to be uploaded, it handles the upload, and in the http request to the + * next handler, passes the name of the file to the next handler. + */ +public class HttpRequestHandler extends SimpleChannelInboundHandler<HttpObject> { + + private HttpRequest request; + + private boolean readingChunks; + + private static final HttpDataFactory factory = new DefaultHttpDataFactory(true); // use disk + + private String requestPath; + + private HttpPostRequestDecoder decoder; + + private final File uploadDir; + + /** + * The directory where files should be uploaded. + */ + public HttpRequestHandler(File uploadDir) { + this.uploadDir = uploadDir; + } + + @Override + public void channelUnregistered(ChannelHandlerContext ctx) throws Exception { + if (decoder != null) { + decoder.cleanFiles(); + } + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception { + if (msg instanceof HttpRequest) { + request = (HttpRequest) msg; + requestPath = new QueryStringDecoder(request.getUri()).path(); + if (request.getMethod() != HttpMethod.POST) { --- End diff -- Okay, thanks for clarifying. According to this (http://restful-api-design.readthedocs.org/en/latest/methods.html), upload is POST and update is PUT... > Integrate web submission interface into the new dashboard > --------------------------------------------------------- > > Key: FLINK-2978 > URL: https://issues.apache.org/jira/browse/FLINK-2978 > Project: Flink > Issue Type: New Feature > Components: Web Client, Webfrontend > Reporter: Sachin Goel > Assignee: Sachin Goel > > As discussed in > http://mail-archives.apache.org/mod_mbox/flink-dev/201511.mbox/%3CCAL3J2zQg6UBKNDnm=8tshpz6r4p2jvx7nrlom7caajrb9s6...@mail.gmail.com%3E, > we should integrate job submission from the web into the dashboard. -- This message was sent by Atlassian JIRA (v6.3.4#6332)