查看POST multipart/form-data协议格式
下载文件存到到字节数组并且POST multipart/form-data接口
package com.http; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Closeable; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HttpDownload { /** * * @param urlPath 下载路径 * @param downloadDir 下载存放目录 * @return 返回下载文件 */ public static byte[] downloadFile(String urlPath, String downloadDir, String fileName) { BufferedInputStream in = null; OutputStream out = null; HttpURLConnection connection = null; try { URL url = new URL(urlPath); connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/octet-stream;charset=utf-8"); connection.setRequestProperty("Connection", "close"); connection.setConnectTimeout(5000); connection.setDoOutput(true); connection.setDoInput(true); connection.connect(); // 文件大小 int fileLength = connection.getContentLength(); System.out.println("file length-------------" + fileLength + " (byte)"); in = new BufferedInputStream(connection.getInputStream()); String path = downloadDir + File.separatorChar + fileName; // 下载文件到本地 File file = new File(path); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } out = new FileOutputStream(file); int size = 0; int len = 0; byte[] buf = new byte[1024 * 1024]; byte[] data = new byte[fileLength]; int dataPos = 0; while ((size = in.read(buf)) != -1) { len += size; out.write(buf, 0, size); for (int i = 0; i < size; i++) { data[dataPos] = buf[i]; dataPos++; } } System.out.println("download finish--" + fileLength + "," + len + "," + dataPos + " (byte)"); return data; } catch (Exception e) { e.printStackTrace(); } finally { close(in, out); closeConnection(connection); } return new byte[0]; } public static String uploadFile(String actionUrl, Map<String, String> textMap, String filekey, byte[] data, String fileName) { String end = "\r\n"; String boundary = "----WebKitFormBoundaryLBFuobxXx0AmQVFR"; DataOutputStream out = null; BufferedReader reader = null; HttpURLConnection connection = null; try { URL url = new URL(actionUrl); connection = (HttpURLConnection)url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "close"); connection.setRequestProperty("Charset", "utf-8"); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); out = new DataOutputStream(connection.getOutputStream()); // 处理文本============================== String strData = ""; if (textMap != null) { Iterator<Map.Entry<String, String>> iter = textMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, String> entry = iter.next(); String name = (String)entry.getKey(); String value = (String)entry.getValue(); if (value == null) { continue; } value = new String(value.getBytes("utf-8")); strData = end + "--" + boundary + end; System.out.println(strData); out.writeBytes(strData); strData = "Content-Disposition: form-data; name=\"" + name + "\"" + end + end + value; System.out.println(strData); out.writeBytes(strData); } } // 处理文本结束============================== // 开始上传文件======================================== strData = end + "--" + boundary + end; System.out.println(strData); out.writeBytes(strData); strData = "Content-Disposition: form-data;" + " name=\"" + filekey + "\"; filename=\"" + fileName + "\"" + end; System.out.println(strData); out.writeBytes(strData); strData = "Content-Type:" + " text/plain" + end + end; System.out.println(strData); out.writeBytes(strData); System.out.println("二进制..."); out.write(data); System.out.println(end); out.writeBytes(end); strData = "--" + boundary + "--" + end; System.out.println(strData); // 开上传文件结束======================================== // 请求结束标志 out.writeBytes(strData); out.flush(); // 获取响应 if (connection.getResponseCode() >= 300) { throw new Exception("HTTP Request fail,response code " + connection.getResponseCode()); } StringBuilder sb = new StringBuilder(); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String strLine = null; while ((strLine = reader.readLine()) != null) { sb.append(strLine); } } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { close(out, reader); closeConnection(connection); } return ""; } public static void close(Closeable... args) { for (Closeable closeable : args) { if (closeable != null) { try { closeable.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static void closeConnection(HttpURLConnection connection) { if (connection != null) { connection.disconnect(); } } public static void main(String[] args) { byte[] data = downloadFile( "https://4f7fce38e855e98a0d722672fc0a4ef4.dlied1.cdntips.net/dl.softmgr.qq.com/original/Picture/FocusOnIV64_1.23.exe?mkey=607322a66f1278d3&f=9870&cip=111.18.94.38&proto=https", "C:\\Users\\admin\\Desktop", "FocusOnIV64_1.23.exe"); Map<String, String> textMap = new HashMap<String, String>(); textMap.put("id", "123"); textMap.put("name", "zinredible"); String responseStr = uploadFile("http://127.0.0.1/api/his/upload", textMap, "testFile", data, "FocusOnIV64_1.23.exe"); System.out.println(responseStr); } }
// springboot接口 @PostMapping(value = "/api/his/upload", produces = "multipart/form-data;charset=UTF-8") @ApiImplicitParams({@ApiImplicitParam(name = "id", paramType = "form"), @ApiImplicitParam(name = "name", paramType = "form")}) public String uploadFile(TestParam param, MultipartFile testFile,HttpServletRequest request) throws Exception