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();
  }

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

(0)

相关推荐

  • java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    一般在项目开发中难免遇到外部接口的调用,本文实例讲述了java后台调用HttpURLConnection类模拟浏览器请求的方法.可用于接口调用.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.cplatform.movie.back.test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import ja

  • Java HttpURLConnection超时和IO异常处理

    最近同步数据的时候发现了一个问题,我本身后台插入数据后给其他部门后台做同步.说简单一点其实就是调用对方提供的接口,进行HTTP请求调用.然后后面发现问题了.HTTP请求的话,有可能请求超时,中断失败,IO异常其实都有可能,如果是平时打开一个网页还好,打不开的时候,你会关掉,或者他页面给你显示信息.但是同步,不可以这样做,一旦请求失败,必须让数据正确的同步,今天才意识到这个问题的重要性. String httpUrl = "https://www.baidu.com/s?ie=UTF-8&

  • Java网络编程之URL+URLconnection使用方法示例

    目录 HTTP GET和POST 从URLs到本地文件 在java.net包中包含两个有趣的类:URL类和URLConnection类.这两个类可以用来创建客户端到web服务器(HTTP服务器)的连接.下面是一个简单的代码例子: URL url = new URL("http://jenkov.com"); URLConnection urlConnection = url.openConnection(); InputStream input = urlConnection.getI

  • 谈谈Java利用原始HttpURLConnection发送POST数据

    URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection.另外一个重要的类是URL,通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例. 每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close

  • java利用java.net.URLConnection发送HTTP请求的方法详解

    一.前言 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求. Java有原生的API可用于发送HTTP请求,即java.net.URL.java.net.URLConnection,这些API很好用.很常用,但不够简便: 所以,也流行有许多Java HTTP请求的framework,如,Apache的HttpClient. 目前项目主要用到Java原生的方式,所以,这里主要介绍此方式. 二.运用原生Java Api发送简单的Get请求.Post请求步骤

  • java 使用HttpURLConnection发送数据简单实例

    java 使用HttpURLConnection发送数据简单实例 每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响.如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字.JAVA使用HttpURLCon

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

    java HttpURLConnection 发送文件和字符串信息 以文件的形式传参 /** * 通过拼接的方式构造请求内容,实现参数传输以及文件传输 * * @param actionUrl 访问的服务器URL * @param params 普通参数 * @param files 文件参数 * @return * @throws IOException */ public static void post(String actionUrl, Map<String, String> para

  • Java中读取文件转换为字符串的方法

    方式一 /** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. 当然也是可以读字符串的. */ /* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/ public String readString1() { try { //FileInputStream 用于读取诸如图像数据之类的原始字节流.要读取字符流,请考虑使用 FileReader. FileInputStream inStream=this.openFileInput(FILE_NAME)

  • java实现客户端向服务器发送文件

    本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.In

  • SpringBoot文件上传控制及Java 获取和判断文件头信息

    之前在使用SpringBoot进行文件上传时,遇到了很多问题.于是在翻阅了很多的博文之后,总算将上传功能进行了相应的完善,便在这里记录下来,供自己以后查阅. 首先,是建立一个标准的SpringBoot 的工程,这里使用的IDE是Intellij Idea,为了方便配置,将默认的配置文件替换为了application.yml. 1.在index.html中进行文件上传功能,这里使用的文件上传方式是ajax,当然也可以按照自己的具体要求使用传统的表单文件上传. <!DOCTYPE html> &l

  • 用python删除java文件头上版权信息的方法

    在使用他人代码时,为不保留文件头部版权信息,需要一个个删掉,费时费力, 写了个脚本,简单清除掉目录下所有的文件的头部版权信息. # -*- coding: utf8 -*- ''''' 删除java文件头部的版权等注释 package之上的部分 ''' import os import sys def delHeader(filepath): if os.path.exists(filepath) : file = open(filepath) lines = file.readlines()

  • 详解Java向服务端发送文件的方法

    本文实例为大家分享了Java向服务端发送文件的方法,供大家参考,具体内容如下 /* *给服务端发送文件,主要是IO流. */ import java.io.*; import java.net.*; class send2 { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.33.1",10005);//建立服务 BufferedReader bufr =

  • java基于jcifs.smb实现远程发送文件到服务器

    本文实例为大家分享了java实现远程发送文件到服务器的具体代码,供大家参考,具体内容如下 1.依赖的相关jar包         jcifs-1.3.14.1.jar 2.创建SMB的声明 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.MalformedURLException;

  • java 替换docx文件中的字符串方法实现

    替换docx文件里面的 ${} 字符串 public class Main { public static void main(String[] args) throws Exception { String template = "C:\\Users\\lzh\\Desktop\\模板.docx"; String outSrc = "C:\\Users\\lzh\\Desktop\\简历.docx"; var is = new FileInputStream(te

随机推荐