• java通过模拟post方式提交表单实现图片上传功能实例


    本文实例讲述了java通过模拟post方式提交表单实现图片上传功能。分享给大家供大家参考,具体如下:

    模拟表单html如下:

    <form action="up_result.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1">
     <label>
     <input type="text" name="name" value="" />
     </label>
     <label>
     <input type="file" name="userfile" />
     </label>
     <label>
     <input type="submit" value="上传" />
     </label>
    </form>

    java代码如下:

    package com.yanek.util; 
    import java.io.BufferedReader; 
    import java.io.DataInputStream; 
    import java.io.DataOutputStream; 
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.InputStreamReader; 
    import java.io.OutputStream; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 
    import java.util.HashMap; 
    import java.util.Iterator; 
    import java.util.Map; 
    import javax.activation.MimetypesFileTypeMap; 
    import net.sf.json.JSONArray; 
    import net.sf.json.JSONObject; 
    public class HttpPostUploadUtil { 
     /** 
      * @param args 
      */ 
     public static void main(String[] args) { 
      String filepath="E:\\ziliao\\0.jpg"; 
      String urlStr = "http://127.0.0.1:8080/minicms/up/up_result.jsp"; 
      Map<String, String> textMap = new HashMap<String, String>(); 
      textMap.put("name", "testname"); 
      Map<String, String> fileMap = new HashMap<String, String>(); 
      fileMap.put("userfile", filepath); 
      String ret = formUpload(urlStr, textMap, fileMap); 
      System.out.println(ret); 
     } 
     /** 
      * 上传图片 
      * 
      * @param urlStr 
      * @param textMap 
      * @param fileMap 
      * @return 
      */ 
     public static String formUpload(String urlStr, Map<String, String> textMap,
       Map<String, String> fileMap) { 
      String res = ""; 
      HttpURLConnection conn = null; 
      String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符 
      try { 
       URL url = new URL(urlStr); 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setConnectTimeout(5000); 
       conn.setReadTimeout(30000); 
       conn.setDoOutput(true); 
       conn.setDoInput(true); 
       conn.setUseCaches(false); 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn 
         .setRequestProperty("User-Agent", 
           "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); 
       conn.setRequestProperty("Content-Type", 
         "multipart/form-data; boundary=" + BOUNDARY); 
       OutputStream out = new DataOutputStream(conn.getOutputStream()); 
       // text 
       if (textMap != null) { 
        StringBuffer strBuf = new StringBuffer(); 
        Iterator iter = textMap.entrySet().iterator(); 
        while (iter.hasNext()) { 
         Map.Entry entry = (Map.Entry) iter.next(); 
         String inputName = (String) entry.getKey(); 
         String inputValue = (String) entry.getValue(); 
         if (inputValue == null) { 
          continue; 
         } 
         strBuf.append("\r\n").append("--").append(BOUNDARY).append( 
           "\r\n"); 
         strBuf.append("Content-Disposition: form-data; name=\"" 
           + inputName + "\"\r\n\r\n"); 
         strBuf.append(inputValue); 
        } 
        out.write(strBuf.toString().getBytes()); 
       } 
       // file 
       if (fileMap != null) { 
        Iterator iter = fileMap.entrySet().iterator(); 
        while (iter.hasNext()) { 
         Map.Entry entry = (Map.Entry) iter.next(); 
         String inputName = (String) entry.getKey(); 
         String inputValue = (String) entry.getValue(); 
         if (inputValue == null) { 
          continue; 
         } 
         File file = new File(inputValue); 
         String filename = file.getName(); 
         String contentType = new MimetypesFileTypeMap() 
           .getContentType(file); 
         if (filename.endsWith(".png")) { 
          contentType = "image/png"; 
         } 
         if (contentType == null || contentType.equals("")) { 
          contentType = "application/octet-stream"; 
         } 
         StringBuffer strBuf = new StringBuffer(); 
         strBuf.append("\r\n").append("--").append(BOUNDARY).append( 
           "\r\n"); 
         strBuf.append("Content-Disposition: form-data; name=\"" 
           + inputName + "\"; filename=\"" + filename 
           + "\"\r\n"); 
         strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); 
         out.write(strBuf.toString().getBytes()); 
         DataInputStream in = new DataInputStream( 
           new FileInputStream(file)); 
         int bytes = 0; 
         byte[] bufferOut = new byte[1024]; 
         while ((bytes = in.read(bufferOut)) != -1) { 
          out.write(bufferOut, 0, bytes); 
         } 
         in.close(); 
        } 
       } 
       byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); 
       out.write(endData); 
       out.flush(); 
       out.close(); 
       // 读取返回数据 
       StringBuffer strBuf = new StringBuffer(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader( 
         conn.getInputStream())); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        strBuf.append(line).append("\n"); 
       } 
       res = strBuf.toString(); 
       reader.close(); 
       reader = null; 
      } catch (Exception e) { 
       System.out.println("发送POST请求出错。" + urlStr); 
       e.printStackTrace(); 
      } finally { 
       if (conn != null) { 
        conn.disconnect(); 
        conn = null; 
       } 
      } 
      return res; 
     } 
    }
  • 相关阅读:
    职业生涯步步高:一位资深经理人的职业生涯感悟
    HDU2082解题报告
    How the brain recognizes objects
    学习"图"(最短路径)算法
    HDOJ1022解题报告
    【转】受用的十条经验哈
    Archive for the 'TED' Category TED视频:Tan Le 能读懂脑电波的耳机
    WiFi 802.11ac驱动无线家庭高清影院
    asp.net后台编写 loading效果
    c#字符串分割
  • 原文地址:https://www.cnblogs.com/roak/p/16299419.html
Copyright © 2020-2023  润新知