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

前端技术 2023/09/08 Java

本文实例讲述了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程序设计有所帮助。

本文地址:https://www.stayed.cn/item/23058

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。