博客
关于我
java发送post请求,使用multipart/form-data的方式传递参数,可实现服务器间文件上传功能(转)
阅读量:432 次
发布时间:2019-03-06

本文共 4943 字,大约阅读时间需要 16 分钟。

public static void testUploadImage() {    String url = "http://xxxtest/Api/testUploadModelBaking";    String fileName = "e:/username/textures/antimap_0017.png";        // 创建请求参数    Map
textMap = new HashMap<>(); textMap.put("name", "testname"); textMap.put("type", "2"); // 文件参数 Map
fileMap = new HashMap<>(); fileMap.put("upfile", fileName); // 设置内容类型 String contentType = ""; // 上传文件 String ret = formUpload(url, textMap, fileMap, contentType); System.out.println(ret);}
public static String formUpload(String urlStr, Map
textMap, Map
fileMap, String contentType) { String res = ""; HttpURLConnection conn = null; String BOUNDARY = "---------------------------123821742118716"; try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(30000); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); OutputStream out = new DataOutputStream(conn.getOutputStream()); // 处理文本参数 if (!textMap.isEmpty()) { StringBuffer strBuf = new StringBuffer(); for (Map.Entry
entry : textMap.entrySet()) { String inputName = entry.getKey(); String inputValue = entry.getValue(); if (inputValue == null) continue; strBuf.append("--").append(BOUNDARY).append("\r\n"); strBuf.append("Content-Disposition: form-data; name=\"").append(inputName).append("\"").append("\r\n\r\n"); strBuf.append(inputValue); } out.write(strBuf.toString().getBytes()); } // 处理文件参数 if (!fileMap.isEmpty()) { for (Map.Entry
entry : fileMap.entrySet()) { String inputName = entry.getKey(); String inputValue = entry.getValue(); if (inputValue == null) continue; File file = new File(inputValue); String filename = file.getName(); // 设置内容类型 if (!"".equals(contentType)) { if (filename.endsWith(".png")) { contentType = "image/png"; } else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) { contentType = "image/jpeg"; } else if (filename.endsWith(".gif")) { contentType = "image/gif"; } else if (filename.endsWith(".ico")) { contentType = "image/x-icon"; } } if ("".equals(contentType)) { contentType = "application/octet-stream"; } StringBuffer strBuf = new StringBuffer(); strBuf.append("--").append(BOUNDARY).append("\r\n"); strBuf.append("Content-Disposition: form-data; name=\"").append(inputName).append("; filename=\"").append(filename).append("\"").append("\r\n"); strBuf.append("Content-Type: ").append(contentType).append("\r\n\r\n"); out.write(strBuf.toString().getBytes()); DataInputStream in = new DataInputStream(new FileInputStream(file)); byte[] buffer = new byte[1024]; while ((bytes = in.read(buffer)) != -1) { out.write(buffer, 0, bytes); } in.close(); } } // 结束分隔符 byte[] endData = ("--" + BOUNDARY + "--\r\n").getBytes(); out.write(endData); out.flush(); out.close(); // 读取返回数据 StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { strBuf.append(line).append("\n"); } res = strBuf.toString(); reader.close(); reader = null; } catch (Exception e) { System.out.println("发送POST请求出错:" + urlStr); e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); conn = null; } } return res;}

代码解释

  • testUploadImage 方法:这是一个用于测试上传图片功能的方法,主要用于发送POST请求上传文件。
  • formUpload 方法:这是一个通用的文件上传方法,接收URL、文本参数、文件参数以及内容类型。
  • 请求参数处理:将文本参数转换为form-data格式,包含Content-Disposition和内容。
  • 文件参数处理:根据文件名设置默认内容类型(如PNG、JPEG等),然后将文件内容添加到请求中。
  • 分隔符处理:使用boundary字符串将请求参数和文件内容分隔开,然后发送请求。
  • 返回数据处理:读取服务器返回的数据并输出结果。

转载地址:http://pxbyz.baihongyu.com/

你可能感兴趣的文章
npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
查看>>
npm install 报错 Failed to connect to github.com port 443 的解决方法
查看>>
npm install 报错 fatal: unable to connect to github.com 的解决方法
查看>>
npm install 报错 no such file or directory 的解决方法
查看>>
npm install 权限问题
查看>>
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm install无法生成node_modules的解决方法
查看>>
npm install的--save和--save-dev使用说明
查看>>
npm node pm2相关问题
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build报Cannot find module错误的解决方法
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm run dev 和npm dev、npm run start和npm start、npm run serve和npm serve等的区别
查看>>
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
查看>>
npm scripts 使用指南
查看>>
npm should be run outside of the node repl, in your normal shell
查看>>
npm start运行了什么
查看>>
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
查看>>
npm 下载依赖慢的解决方案(亲测有效)
查看>>
npm 安装依赖过程中报错:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
查看>>