From 50ac0bf0dd042f5000a626346b74e9749bdd3efe Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Tue, 31 Mar 2020 22:33:00 -0400 Subject: [PATCH] add support for multipart uploads --- .../cobbzilla/util/http/HttpRequestBean.java | 2 ++ .../org/cobbzilla/util/http/HttpUtil.java | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/cobbzilla/util/http/HttpRequestBean.java b/src/main/java/org/cobbzilla/util/http/HttpRequestBean.java index 1659257..26501d4 100644 --- a/src/main/java/org/cobbzilla/util/http/HttpRequestBean.java +++ b/src/main/java/org/cobbzilla/util/http/HttpRequestBean.java @@ -128,6 +128,8 @@ public class HttpRequestBean { } public boolean hasContentType () { return getContentType() != null; } + public String contentType () { return hasContentType() ? getContentType().getMimeType() : null; } + @JsonIgnore public Long getContentLength() { if (!hasHeaders()) return null; final String value = getFirstHeaderValue(CONTENT_LENGTH); diff --git a/src/main/java/org/cobbzilla/util/http/HttpUtil.java b/src/main/java/org/cobbzilla/util/http/HttpUtil.java index 111c432..4baeedc 100644 --- a/src/main/java/org/cobbzilla/util/http/HttpUtil.java +++ b/src/main/java/org/cobbzilla/util/http/HttpUtil.java @@ -35,6 +35,7 @@ import static com.google.common.net.HttpHeaders.CONTENT_DISPOSITION; import static org.apache.http.HttpHeaders.*; import static org.cobbzilla.util.daemon.ZillaRuntime.die; import static org.cobbzilla.util.daemon.ZillaRuntime.hexnow; +import static org.cobbzilla.util.http.HttpContentTypes.MULTIPART_FORM_DATA; import static org.cobbzilla.util.http.HttpContentTypes.contentType; import static org.cobbzilla.util.http.HttpMethods.*; import static org.cobbzilla.util.http.HttpStatusCodes.NO_CONTENT; @@ -80,15 +81,15 @@ public class HttpUtil { return urlConnection.getInputStream(); } - public static InputStream post (String urlString, InputStream data, Map headers, Map headers2) throws IOException { - return upload(urlString, POST, data, headers, headers2); + public static InputStream post (String urlString, InputStream data, String multipartFileName, Map headers, Map headers2) throws IOException { + return upload(urlString, POST, multipartFileName, data, headers, headers2); } - public static InputStream put (String urlString, InputStream data, Map headers, Map headers2) throws IOException { - return upload(urlString, PUT, data, headers, headers2); + public static InputStream put (String urlString, InputStream data, String multipartFileName, Map headers, Map headers2) throws IOException { + return upload(urlString, PUT, multipartFileName, data, headers, headers2); } - public static InputStream upload (String urlString, String method, InputStream data, Map headers, Map headers2) throws IOException { + public static InputStream upload (String urlString, String method, String multipartFileName, InputStream data, Map headers, Map headers2) throws IOException { final URL url = new URL(urlString); final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod(method); @@ -97,7 +98,16 @@ public class HttpUtil { if (data != null) { urlConnection.setDoOutput(true); final OutputStream upload = urlConnection.getOutputStream(); - IOUtils.copyLarge(data, upload); + if (multipartFileName != null) { + urlConnection.setRequestProperty(CONTENT_TYPE, MULTIPART_FORM_DATA); + final MultipartEntityBuilder mb = MultipartEntityBuilder.create(); + mb.addBinaryBody(multipartFileName, data); + mb.build().writeTo(upload); + + } else { + IOUtils.copyLarge(data, upload); + } + upload.close(); } return urlConnection.getInputStream(); }