java模拟post方式提交表单实现图片上传

作者: javaboy2012
Email:yanek@163.com
qq:    1046011462

 

 

模拟表单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;
 }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值