最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java HttpURLConnection 發(fā)送文件和字符串信息

 更新時(shí)間:2017年06月19日 10:00:32   投稿:lqh  
這篇文章主要介紹了java HttpURLConnection 發(fā)送文件和字符串信息的相關(guān)資料,需要的朋友可以參考下

java HttpURLConnection 發(fā)送文件和字符串信息

以文件的形式傳參

/**
   * 通過(guò)拼接的方式構(gòu)造請(qǐng)求內(nèi)容,實(shí)現(xiàn)參數(shù)傳輸以及文件傳輸
   * 
   * @param actionUrl 訪問(wèn)的服務(wù)器URL
   * @param params 普通參數(shù)
   * @param files 文件參數(shù)
   * @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); // 緩存的最長(zhǎng)時(shí)間
    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);

    // 首先組拼文本類(lèi)型的參數(shù)
    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;
    // 發(fā)送文件數(shù)據(jù)
    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是文件的名稱(chēng)
        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());
      }

      // 請(qǐng)求結(jié)束標(biāo)志
      byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
      outStream.write(end_data);
      outStream.flush();
      // 得到響應(yīng)碼
      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();
  }

以數(shù)據(jù)流的形式傳參

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); // 緩存的最長(zhǎng)時(shí)間
    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);

    // 首先組拼文本類(lèi)型的參數(shù)
    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;
    // 發(fā)送文件數(shù)據(jù)
    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());
      }

      // 請(qǐng)求結(jié)束標(biāo)志
      byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
      outStream.write(end_data);
      outStream.flush();
      // 得到響應(yīng)碼
      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();
      // 解析服務(wù)器返回來(lái)的數(shù)據(jù)
      return ParseJson.getEditMadIconResult(sb2.toString());
    }
    else
    {
      return "Update icon Fail";
    }
    // return in.toString();
  }

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 詳解MybatisPlus集成nacos導(dǎo)致druid連接不上數(shù)據(jù)庫(kù)

    詳解MybatisPlus集成nacos導(dǎo)致druid連接不上數(shù)據(jù)庫(kù)

    這篇文章主要介紹了詳解MybatisPlus集成nacos導(dǎo)致druid連接不上數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Springboot日期轉(zhuǎn)換器實(shí)現(xiàn)代碼及示例

    Springboot日期轉(zhuǎn)換器實(shí)現(xiàn)代碼及示例

    這篇文章主要介紹了Springboot日期轉(zhuǎn)換器實(shí)現(xiàn)代碼及示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Springboot 集成 lombok.jar過(guò)程解析

    Springboot 集成 lombok.jar過(guò)程解析

    這篇文章主要介紹了Springboot 集成 lombok.jar過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java 中Object與Objects的區(qū)別在哪里

    java 中Object與Objects的區(qū)別在哪里

    這篇文章主要介紹了java 中Object與Objects的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 深入了解Java線程池的原理使用及性能優(yōu)化

    深入了解Java線程池的原理使用及性能優(yōu)化

    JAVA線程池是一種管理和復(fù)用線程資源的機(jī)制,可以提高程序的效率和響應(yīng)速度。本文將介紹線程池的原理、使用方法和性能優(yōu)化技巧,幫助讀者深入了解和應(yīng)用JAVA線程池
    2023-04-04
  • java.io.File的renameTo方法移動(dòng)文件失敗的解決方案

    java.io.File的renameTo方法移動(dòng)文件失敗的解決方案

    這篇文章主要介紹了java.io.File的renameTo方法移動(dòng)文件失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java 爬蟲(chóng)服務(wù)器被屏蔽的解決方案

    Java 爬蟲(chóng)服務(wù)器被屏蔽的解決方案

    這篇文章主要介紹了Java 爬蟲(chóng)服務(wù)器被屏蔽的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringCloud之Zuul服務(wù)網(wǎng)關(guān)詳解

    SpringCloud之Zuul服務(wù)網(wǎng)關(guān)詳解

    這篇文章主要介紹了SpringCloud之Zuul服務(wù)網(wǎng)關(guān)詳解,服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中一個(gè)不可或缺的部分,通過(guò)服務(wù)網(wǎng)關(guān)統(tǒng)一向外系統(tǒng)提供REST?API的過(guò)程中,除了具備服務(wù)路由、均衡負(fù)載功能之外,它還具備了權(quán)限控制(鑒權(quán))等功能,需要的朋友可以參考下
    2023-08-08
  • java通過(guò)ssh連接執(zhí)行shell命令,文件傳輸方式

    java通過(guò)ssh連接執(zhí)行shell命令,文件傳輸方式

    這篇文章主要介紹了java通過(guò)ssh連接執(zhí)行shell命令,文件傳輸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java中StopWatch工具類(lèi)的用法詳解

    Java中StopWatch工具類(lèi)的用法詳解

    stopWatch 是org.springframework.util 包下的一個(gè)工具類(lèi),使用它可直觀的輸出代碼執(zhí)行耗時(shí),以及執(zhí)行時(shí)間百分比,下面就跟隨小編一起來(lái)看看它的具體用法吧
    2024-12-12

最新評(píng)論

全椒县| 增城市| 乌恰县| 航空| 苍溪县| 东乌珠穆沁旗| 托克托县| 惠水县| 厦门市| 资源县| 开化县| 德钦县| 社会| 建昌县| 十堰市| 台北市| 灌南县| 江油市| 北海市| 邵武市| 扶沟县| 龙门县| 游戏| 伊金霍洛旗| 阳曲县| 抚顺市| 浑源县| 衡山县| 云和县| 文山县| 福贡县| 平顺县| 长兴县| 论坛| 新民市| 荥阳市| 海兴县| 迭部县| 诏安县| 德惠市| 灵璧县|