首页 > 开发 > Java > 正文

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

2024-07-13 10:09:07
字体:
来源:转载
供稿:网友

java/203164.html">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教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表