`

模拟form表单上传图片

    博客分类:
  • J2SE
 
阅读更多

转自:http://blog.csdn.net/5iasp/article/details/8669644#comments 

public static void main(String[] args) {
  
  String filepath="d:\\test\\1.jpg";  
  String urlStr = "http://localhost:8080/minicms/picup.jsp";  
  Map<String, String> txtMap = new HashMap<String, String>(); 
  txtMap.put("name", "testname");

  Map<String, String> fMap = new HashMap<String, String>();  
  fMap.put("userfile", filepath);  
  String ret = formUpload(urlStr, txtMap, fMap);  
  System.out.println(ret);
  }
 
 public static String formUploadTest(String urlStr, Map<String, String> textMap,Map<String, String> fileMap) {
  String res = null;
  HttpURLConnection conn = null;
  String 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());
   // 一、
   if (textMap != null && textMap.size>0) {
    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());
   }

   // 图片
   if (fileMap != null && textMap.size>0) {
    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!=null && 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;
 }

}

分享到:
评论

相关推荐

    php curl模仿form表单提交图片或文件

    总结,通过PHP的cURL和ThinkPHP5,我们可以轻松地模拟form表单提交,包括图片和文件。理解cURL的工作原理以及如何在TP5中使用它,对于进行复杂的HTTP交互是非常有用的。请确保在实际应用中遵守相关的安全规范,如...

    JAVA表单上传多个文件 java web form表单上传多个文件.zip_form表单post提交

    在Java Web开发中,表单上传是常见的功能之一,尤其是当用户需要上传多个文件时。本文将详细讲解如何实现这个功能,主要涉及HTML表单、Servlet、MVC框架(如Spring MVC)以及文件处理的相关知识。 1. HTML表单设置...

    php模拟表单上传图片

    php模拟表单上传图片 POST ,做一个b.php,接收数据

    nodejs 实现模拟form表单上传文件

    在Node.js中实现模拟form表单上传文件,主要涉及到HTTP协议中的multipart/form-data数据格式。这种格式用于提交表单,尤其是文件上传时。文件上传时,浏览器会将每个文件作为form-data的一部分,每一个部分都通过一...

    phpCurl请求工具,可模拟表单、上传文件

    通用的http请求工具,可以模拟表单提交、上传文件、发送请求、获取网页内容

    在一个form表单里同时上传多个文件和文本信息的解决方案

    通过以上步骤,我们成功地在一个form表单中实现了同时上传多个文件和文本信息的功能。这种实现方式不仅提高了用户的使用体验,也方便了开发者对上传数据的管理和处理。在实际应用中,还可以进一步扩展该功能,例如...

    VC++模拟post上传Form表单

    本篇文章将深入探讨如何在VC++中模拟POST方式上传表单,这是一个在网络编程中常见的任务,通常用于向Web服务器发送数据。 首先,POST方法是HTTP协议中的一个请求方法,用于向服务器提交数据,比如填写表单后提交...

    http模拟POST表单上传文件

    在本文中,我们将深入探讨如何通过模拟POST表单上传文件到服务器,这是一项常见的任务,尤其在开发Web应用程序时。我们将涵盖客户端如何构建请求以及服务器如何接收和处理这些请求。 首先,让我们理解POST请求的...

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar C#的wpf客户端使用HttpWebRequest模拟网页表单提交数据到Java的web服务端,...*该程序可以同时提交表单数据和上传文件* **********************************

    php使用curl模拟浏览器表单上传文件或者图片的方法

    控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: &lt;body&gt; &lt;form action=UploadFile.php method=post enctype=multipart/form-data&gt; &lt;input type=file name=fileUpload /&...

    NodeJs form-data格式传输文件的方法

    本文介绍了Node Js 使用...form表单上传文件流程(PHP和node js) 文件上传操作原理 form表单【注意:enctype=”multipart/form-data”】上传文件时,首先会将文件上传到你本机的temp目录,然后执行move_upload_file

    Android实现表单上传文件

    本文将详细介绍如何在Android中实现表单上传文件,尤其是图片文件。 首先,理解表单上传的基本原理。在Web开发中,HTML的`&lt;form&gt;`标签可以设置`enctype="multipart/form-data"`来支持文件上传。但在Android中,由于...

    libcurl 提交post表单数据 上传图片 demo

    在本教程中,我们将探讨如何利用libcurl库在C/C++程序中实现POST方法来提交表单数据并上传图片。这个过程涉及到几个关键步骤,包括初始化libcurl会话、设置请求选项、构建POST数据以及处理响应。 首先,你需要包含...

    C++使用libcurl提供的API上传文件且Post表单数据

    在这个场景中,我们将深入探讨如何利用libcurl在C++中上传文件并发送POST表单数据。 首先,`con_test.cpp`是主要的源代码文件,它包含了使用libcurl进行文件上传和POST操作的具体实现。`StdAfx.cpp`和`StdAfx.h`是...

    post模拟登录,提交表单

    在IT行业中,模拟登录和提交表单是网络自动化和数据抓取的重要技术,常用于测试、数据分析或自动化脚本编写。这里的"post模拟登录,提交表单"涉及到HTTP请求方式中的POST方法,以及如何处理登录过程和后续的表单提交...

    VC 构造http协议数据的post上传图片类(MFC环境 带编码转换)模拟表单提交

    在本文中,我们将深入探讨如何在VC++ MFC环境下构建一个HTTP协议数据的POST上传图片类,同时模拟表单提交。这个过程涉及到的关键技术包括HTTP POST请求、编码转换以及MFC类库的使用。 首先,我们需要理解HTTP POST...

    Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传

    Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传

    C# post模拟提交接收图片存到服务器上

    在C#编程中,模拟POST提交通常用于模拟用户在网页上的表单提交行为,...以上就是使用C#模拟POST提交上传图片到服务器的基本流程和关键知识点。实际应用中,可能需要根据具体的业务需求和服务器端的API进行相应的调整。

Global site tag (gtag.js) - Google Analytics