全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java HttpURLConnection 发送文件和字符串信息

java HttpURLConnection 发送文件和字符串信息

以文件的形式传参

/**
   * 通过拼接的方式构造请求内容,实现参数传输以及文件传输
   * 
   * @param actionUrl 访问的服务器URL
   * @param params 普通参数
   * @param files 文件参数
   * @return
   * @throws IOException
   */
  public static void post(String actionUrl, Map<String, String> params, Map<String, File> files) throws IOException
  {

    String BOUNDARY = java.util.UUID.randomUUID().toString();
    String PREFIX = "--", LINEND = "\r\n";
    String MULTIPART_FROM_DATA = "multipart/form-data";
    String CHARSET = "UTF-8";

    URL uri = new URL(actionUrl);
    HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
    conn.setReadTimeout(5 * 1000); // 缓存的最长时间
    conn.setDoInput(true);// 允许输入
    conn.setDoOutput(true);// 允许输出
    conn.setUseCaches(false); // 不允许使用缓存
    conn.setRequestMethod("POST");
    conn.setRequestProperty("connection", "keep-alive");
    conn.setRequestProperty("Charsert", "UTF-8");
    conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

    // 首先组拼文本类型的参数
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, String> entry : params.entrySet())
    {
      sb.append(PREFIX);
      sb.append(BOUNDARY);
      sb.append(LINEND);
      sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
      sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
      sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
      sb.append(LINEND);
      sb.append(entry.getValue());
      sb.append(LINEND);
    }

    DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
    outStream.write(sb.toString().getBytes());
    InputStream in = null;
    // 发送文件数据
    if (files != null)
    {
      for (Map.Entry<String, File> file : files.entrySet())
      {
        StringBuilder sb1 = new StringBuilder();
        sb1.append(PREFIX);
        sb1.append(BOUNDARY);
        sb1.append(LINEND);
        // name是post中传参的键 filename是文件的名称
        sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getKey() + "\"" + LINEND);
        sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
        sb1.append(LINEND);
        outStream.write(sb1.toString().getBytes());

        InputStream is = new FileInputStream(file.getValue());
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = is.read(buffer)) != -1)
        {
          outStream.write(buffer, 0, len);
        }

        is.close();
        outStream.write(LINEND.getBytes());
      }

      // 请求结束标志
      byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
      outStream.write(end_data);
      outStream.flush();
      // 得到响应码
      int res = conn.getResponseCode();
      if (res == 200)
      {
        in = conn.getInputStream();
        int ch;
        StringBuilder sb2 = new StringBuilder();
        while ((ch = in.read()) != -1)
        {
          sb2.append((char) ch);
        }
      }
      outStream.close();
      conn.disconnect();
    }
    // return in.toString();
  }

以数据流的形式传参

public static String postFile(String actionUrl, Map<String, String> params, Map<String, byte[]> files)
      throws Exception
  {
    StringBuilder sb2 = null;
    String BOUNDARY = java.util.UUID.randomUUID().toString();
    String PREFIX = "--", LINEND = "\r\n";
    String MULTIPART_FROM_DATA = "multipart/form-data";
    String CHARSET = "UTF-8";

    URL uri = new URL(actionUrl);
    HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
    conn.setReadTimeout(6 * 1000); // 缓存的最长时间
    conn.setDoInput(true);// 允许输入
    conn.setDoOutput(true);// 允许输出
    conn.setUseCaches(false); // 不允许使用缓存
    conn.setRequestMethod("POST");
    conn.setRequestProperty("connection", "keep-alive");
    conn.setRequestProperty("Charsert", "UTF-8");
    conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

    // 首先组拼文本类型的参数
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, String> entry : params.entrySet())
    {
      sb.append(PREFIX);
      sb.append(BOUNDARY);
      sb.append(LINEND);
      sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
      sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
      sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
      sb.append(LINEND);
      sb.append(entry.getValue());
      sb.append(LINEND);
    }

    DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
    outStream.write(sb.toString().getBytes());
    InputStream in = null;
    // 发送文件数据
    if (files != null)
    {
      for (Map.Entry<String, byte[]> file : files.entrySet())
      {
        StringBuilder sb1 = new StringBuilder();
        sb1.append(PREFIX);
        sb1.append(BOUNDARY);
        sb1.append(LINEND);
        sb1.append("Content-Disposition: form-data; name=\"pic\"; filename=\"" + file.getKey() + "\"" + LINEND);
        sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
        sb1.append(LINEND);
        outStream.write(sb1.toString().getBytes());

        // InputStream is = new FileInputStream(file.getValue());
        // byte[] buffer = new byte[1024];
        // int len = 0;
        // while ((len = is.read(buffer)) != -1)
        // {
        // outStream.write(buffer, 0, len);
        // }
        // is.close();
        outStream.write(file.getValue());

        outStream.write(LINEND.getBytes());
      }

      // 请求结束标志
      byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
      outStream.write(end_data);
      outStream.flush();
      // 得到响应码
      int res = conn.getResponseCode();
      if (res == 200)
      {
        in = conn.getInputStream();
        int ch;
        sb2 = new StringBuilder();
        while ((ch = in.read()) != -1)
        {
          sb2.append((char) ch);
        }
        System.out.println(sb2.toString());
      }
      outStream.close();
      conn.disconnect();
      // 解析服务器返回来的数据
      return ParseJson.getEditMadIconResult(sb2.toString());
    }
    else
    {
      return "Update icon Fail";
    }
    // return in.toString();
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # HttpURLConnection  # 发送文件和字符串信息  # 浅谈Java HttpURLConnection请求方式  # 一文读懂JAVA中HttpURLConnection的用法  # Java HttpURLConnection使用方法详解  # JAVA通过HttpURLConnection 上传和下载文件的方法  # Java 中HttpURLConnection附件上传的实例详解  # java 使用HttpURLConnection发送数据简单实例  # Java HttpURLConnection超时和IO异常处理  # Java HttpURLConnection使用方法与实例演示分析  # 希望能  # 谢谢大家  # 文件传输  # 中传  # UTF  # CHARSET  # uri  # conn  # setReadTimeout  # openConnection  # data  # LINEND  # PREFIX  # toString  # form  # multipart  # MULTIPART_FROM_DATA  # connection  # setRequestProperty  # POST 


相关文章: 中山网站制作网页,中山新生登记系统登记流程?  企业微网站怎么做,公司网站和公众号有什么区别?  大连 网站制作,大连天途有线官网?  如何在阿里云购买域名并搭建网站?  如何撰写建站申请书?关键要点有哪些?  Java解压缩zip - 解压缩多个文件或文件夹实例  济南网站制作的价格,历城一职专官方网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  建站主机选哪家性价比最高?  移民网站制作流程,怎么看加拿大移民官网?  Python路径拼接规范_跨平台处理说明【指导】  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  建站之星如何快速解决建站难题?  如何在阿里云部署织梦网站?  如何通过cPanel快速搭建网站?  如何用PHP快速搭建高效网站?分步指南  微信小程序制作网站有哪些,微信小程序需要做网站吗?  建站之星免费版是否永久可用?  如何快速搭建高效简练网站?  招贴海报怎么做,什么是海报招贴?  如何在自有机房高效搭建专业网站?  h5网站制作工具有哪些,h5页面制作工具有哪些?  如何在Golang中指定模块版本_使用go.mod控制版本号  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  建站之星如何助力企业快速打造五合一网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  建站168自助建站系统:快速模板定制与SEO优化指南  ,网站推广常用方法?  ,有什么在线背英语单词效率比较高的网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在阿里云高效完成企业建站全流程?  建站之星在线版空间:自助建站+智能模板一键生成方案  Bpmn 2.0的XML文件怎么画流程图  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  宝塔面板如何快速创建新站点?  如何自定义建站之星模板颜色并下载新样式?  如何在云主机上快速搭建多站点网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  5种Android数据存储方式汇总  C++中引用和指针有什么区别?(代码说明)  如何在建站之星绑定自定义域名?  如何通过WDCP绑定主域名及创建子域名站点?  网站制作公司排行榜,四大门户网站排名?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何快速查询域名建站关键信息?  公众号网站制作网页,微信公众号怎么制作?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  建站与域名管理如何高效结合? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。