LOG.debug("Upload report"); long startTime = System.currentTimeMillis(); PostRequest.Part filePart = new PostRequest.Part(MediaTypes.ZIP, report); PostRequest post = new PostRequest("api/ce/submit") .setMediaType(MediaTypes.PROTOBUF)
private WsResponse post(PostRequest postRequest) { HttpUrl.Builder urlBuilder = prepareUrlBuilder(postRequest); RequestBody body; Map<String, PostRequest.Part> parts = postRequest.getParts(); if (parts.isEmpty()) { // parameters are defined in the body (application/x-www-form-urlencoded) FormBody.Builder formBody = new FormBody.Builder(); postRequest.getParameters().getKeys() .forEach(key -> postRequest.getParameters().getValues(key) .forEach(value -> formBody.add(key, value))); body = formBody.build(); } else { // parameters are defined in the URL (as GET) completeUrlQueryParameters(postRequest, urlBuilder); MultipartBody.Builder bodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); parts.entrySet().forEach(param -> { PostRequest.Part part = param.getValue(); bodyBuilder.addFormDataPart( param.getKey(), part.getFile().getName(), RequestBody.create(MediaType.parse(part.getMediaType()), part.getFile())); }); body = bodyBuilder.build(); } Request.Builder okRequestBuilder = prepareOkRequestBuilder(postRequest, urlBuilder).post(body); Response response = doCall(prepareOkHttpClient(noRedirectOkHttpClient, postRequest), okRequestBuilder.build()); response = checkRedirect(response, postRequest); return new OkHttpResponse(response); }
LOG.debug("Upload report"); long startTime = System.currentTimeMillis(); PostRequest.Part filePart = new PostRequest.Part(MediaTypes.ZIP, report); PostRequest post = new PostRequest("api/ce/submit") .setMediaType(MediaTypes.PROTOBUF)
private WsResponse post(PostRequest postRequest) { HttpUrl.Builder urlBuilder = prepareUrlBuilder(postRequest); RequestBody body; Map<String, PostRequest.Part> parts = postRequest.getParts(); if (parts.isEmpty()) { // parameters are defined in the body (application/x-www-form-urlencoded) FormBody.Builder formBody = new FormBody.Builder(); postRequest.getParameters().getKeys() .forEach(key -> postRequest.getParameters().getValues(key) .forEach(value -> formBody.add(key, value))); body = formBody.build(); } else { // parameters are defined in the URL (as GET) completeUrlQueryParameters(postRequest, urlBuilder); MultipartBody.Builder bodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); parts.entrySet().forEach(param -> { PostRequest.Part part = param.getValue(); bodyBuilder.addFormDataPart( param.getKey(), part.getFile().getName(), RequestBody.create(MediaType.parse(part.getMediaType()), part.getFile())); }); body = bodyBuilder.build(); } Request.Builder okRequestBuilder = prepareOkRequestBuilder(postRequest, urlBuilder).post(body); Response response = doCall(prepareOkHttpClient(noRedirectOkHttpClient, postRequest), okRequestBuilder.build()); response = checkRedirect(response, postRequest); return new OkHttpResponse(response); }
/** * Uploads the report file to server and returns the generated task id */ @VisibleForTesting String upload(File report) { LOG.debug("Upload report"); long startTime = System.currentTimeMillis(); ProjectDefinition projectDefinition = projectReactor.getRoot(); PostRequest.Part filePart = new PostRequest.Part(MediaTypes.ZIP, report); PostRequest post = new PostRequest("api/ce/submit") .setMediaType(MediaTypes.PROTOBUF) .setParam("projectKey", projectDefinition.getKey()) .setParam("projectName", projectDefinition.getName()) .setParam("projectBranch", projectDefinition.getBranch()) .setPart("report", filePart); WsResponse response = wsClient.call(post).failIfNotSuccessful(); try (InputStream protobuf = response.contentStream()) { return WsCe.SubmitResponse.parser().parseFrom(protobuf).getTaskId(); } catch (Exception e) { throw Throwables.propagate(e); } finally { long stopTime = System.currentTimeMillis(); LOG.info("Analysis report uploaded in " + (stopTime - startTime) + "ms"); } }
@Test public void upload_file() throws Exception { answerHelloWorld(); File reportFile = temp.newFile(); FileUtils.write(reportFile, "the report content"); PostRequest request = new PostRequest("api/report/upload") .setParam("project", "theKey") .setPart("report", new PostRequest.Part(MediaTypes.TXT, reportFile)) .setMediaType(MediaTypes.PROTOBUF); underTest = HttpConnector.newBuilder().url(serverUrl).build(); WsResponse response = underTest.call(request); assertThat(response.hasContent()).isTrue(); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getMethod()).isEqualTo("POST"); assertThat(recordedRequest.getPath()).isEqualTo("/api/report/upload?project=theKey"); String body = IOUtils.toString(recordedRequest.getBody().inputStream()); assertThat(body) .contains("Content-Disposition: form-data; name=\"report\"") .contains("Content-Type: text/plain") .contains("the report content"); }
@Test public void add_part() throws IOException { PostRequest request = new PostRequest("api/issues/search"); File reportFile = temp.newFile(); request.setPart("report", new PostRequest.Part(MediaTypes.JSON, reportFile)); assertThat(request.getParts()).hasSize(1); PostRequest.Part part = request.getParts().get("report"); assertThat(part.getMediaType()).isEqualTo(MediaTypes.JSON); assertThat(part.getFile()).isSameAs(reportFile); } }