首页 > 编程 > Java > 正文

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

2019-11-26 14:53:12
字体:
来源:转载
供稿:网友

本文实例讲述了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;  } }

希望本文所述对大家Java程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表