虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > java HttpURLConnection 发送文件和字符串信息

java HttpURLConnection 发送文件和字符串信息
类别:Java编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了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 = "rn";
    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 = "rn";
    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 发送文件和字符串