首页 > 编程语言 >java通过模拟post方式提交表单实现图片上传功能实例

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

时间:2024-12-27 22:45:54浏览次数:5  
标签:java String 表单 ------------- new import post conn

java通过模拟post方式提交表单实现图片上传功能实例| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |

| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 16299419| java通过模拟post方式提交表单实现图片上传功能实例| 2022-05-22T22:44:00| | BlogPost|

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

<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; 
 } 
}

 

| 648658| 这篇文章主要介绍了java通过模拟post方式提交表单实现图片上传功能实例,涉及Java针对表单的提交操作响应及文件传输的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下| 2024-04-29T21:13:00| false| | 2022-05-22T22:44:18.997| true| 本文实例讲述了java通过模拟post方式提交表单实现图片上传功能。分享给大家供大家参考,具体如下: <form action="up_result.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1"> <| Anonymous|

标签:java,String,表单,-------------,new,import,post,conn
From: https://www.cnblogs.com/ralphlauren/p/18621231

相关文章

  • Java中Iterator用法整理
    Java中Iterator用法整理|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|-......
  • java中Map遍历的四种方式
    java中Map遍历的四种方式|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|......
  • JAVA变量
    JAVA变量|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|-------------......
  • Java从网络读取图片并保存至本地
    Java从网络读取图片并保存至本地|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|--------......
  • java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一
    java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermissi......
  • java获取当前年份、月份和日期
    java获取当前年份、月份和日期|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|----------......
  • Java面试突击手册,一周刷完这300道面试题,你也可以当架构师!
      前言面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和基础。对源码解读和核心原理理解也是成了加分项,特别是对Java的一些核心基础知识点掌握的不够或者没有体系......
  • Java 中 Exception 和 Error 有什么区别?
    在Java的世界里,Exception和Error就像是两个性格迥异的双胞胎兄弟,虽然他们都代表着“出了问题”,但处理方式和对程序的影响可大不一样哦!Exception(异常)Exception就像是你在做作业时遇到的一道难题。虽然它让你卡壳了,但只要你找到正确的方法或者找人帮忙(比如查资料、问老师),你还是......
  • 想在 Java 八股文面试中脱颖而出?这1000 道互联网大厂 工程师面试题必不可少
     国内的互联网面试,恐怕是现存的、最接近科举考试的制度。以美国为例,北美工程师面试比较重视算法(Coding),近几年也会加入Design轮(系统设计和面向对象设计OOD)和BQ轮(Behavioralquestion,行为面试问题)。那么为什么国内面试不采取这样的考察方式呢?简单来说,互联网IT行业的求......
  • 《面试八股文》之2024年GitHub中文社区Java 领域又一份牛逼笔记
        今天讲讲跳槽。新年即将开启,一些不满现状,被外界的“高薪”“好福利”吸引的人,一般就在这时候毅然决然地跳槽了。跳槽是为了寻求更好的发展,但在跳槽前我们也不能确定下家就是更好的归宿,这就更加需要我们审慎地去对待,不能盲目跳槽。其次,我们离职和跳槽,其中的原因很大......