博客
关于我
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使用前设置和升级
查看>>
npm入门,这篇就够了
查看>>
npm切换到淘宝源
查看>>
npm切换源淘宝源的两种方法
查看>>
npm前端包管理工具简介---npm工作笔记001
查看>>
npm包管理深度探索:从基础到进阶全面教程!
查看>>
npm升级以及使用淘宝npm镜像
查看>>
npm发布包--所遇到的问题
查看>>
npm发布自己的组件UI包(详细步骤,图文并茂)
查看>>
npm和package.json那些不为常人所知的小秘密
查看>>
npm和yarn清理缓存命令
查看>>
npm和yarn的使用对比
查看>>
npm如何清空缓存并重新打包?
查看>>
npm学习(十一)之package-lock.json
查看>>
npm安装 出现 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! 解决方法
查看>>
npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
查看>>
npm安装教程
查看>>
npm报错Cannot find module ‘webpack‘ Require stack
查看>>
npm报错Failed at the node-sass@4.14.1 postinstall script
查看>>
npm报错fatal: Could not read from remote repository
查看>>