`
shibin_1109
  • 浏览: 79433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • 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;
	}

}


原文出处:http://blog.csdn.net/5iasp/article/details/8669644
分享到:
评论

相关推荐

    模拟表单post提交

    HttpClient是一个功能丰富的HTTP客户端编程工具包,它允许Java开发者以编程的方式执行HTTP请求,包括模拟POST提交。这个库不仅支持基本的HTTP协议,还提供了处理cookies、重定向、管理连接池等高级功能。 在使用...

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

    这样,我们就完成了从Java程序中模拟POST提交表单并上传图片的过程。服务器端(如up_result.jsp)接收到这些数据后,通常会处理上传的文件,比如保存到服务器的某个目录,并可能返回一些响应信息。 总的来说,这个...

    java处理文件上传的底层实现以及java模拟post协议实现文件上传

    本篇将详细探讨Java处理文件上传的底层实现,以及如何使用Java模拟POST协议来实现文件上传。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行。当用户在表单中选择文件并提交时...

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

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

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

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

    http模拟POST表单上传文件

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

    java发起http请求提交表单

    这里的关键点是通过字符串拼接的方式构建完整的HTML表单,并设置了表单提交的目标地址`action="http://test.chinapnr.com/gar/RecvMerchant.do"`、提交方式`method="post"`以及一系列的隐藏字段。 ### 2. 使用Java...

    如何用selenium封装post参数提交示例

    在某些场景下,我们需要模拟POST请求来与服务器进行数据交互,这通常是HTTP协议中的一个方法,用于发送数据到服务器以创建或更新资源。在描述中提到的,我们将探讨如何使用Selenium来封装POST参数并提交,以获取异步...

    java 模拟登录(含验证码)

    综上所述,Java模拟登录结合OCR技术可以实现自动化登录过程,提高工作效率。通过tess4j库,我们可以方便地识别和处理验证码,使得这个过程更加完整和实用。在开发过程中,理解HTTP协议、掌握相关库的使用以及熟悉OCR...

    JAVA模拟http上传文件_代码男_新浪博客

    以上就是关于“JAVA模拟http上传文件”的核心知识点。通过理解并实践这些概念,开发者可以构建出稳定、高效的文件上传功能。在实际项目中,还可以结合Spring框架或其他Web库,简化文件上传的实现。

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...

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

    在一个Web应用中,经常需要实现用户能够在一个表单中上传多个文件及文本信息的功能。本文将详细介绍如何在基于Tomcat5.0.30与Spring Framework的环境下实现这一功能。 ### 一、背景介绍 在实际开发过程中,很多...

    java模拟微信浏览器访问.rar

    这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...

    JAVA实现模拟导入数据/上传文件进度条

    在Java Web开发中,实现一个模拟数据导入或文件上传进度条功能可以极大提升用户体验,让用户在等待过程中心中有数。这个功能通常涉及到前端与后端的交互,涉及到的技术包括Servlet、JSP、jQuery和Ajax。下面我们将...

    HttpUtils Java get post 工具类

    POST方法常用于向服务器提交数据,如表单提交。HttpUtils工具类中,POST请求的实现可能如下: ```java public static String sendPost(String url, Map, String&gt; params) { // 参数处理 // ... // 使用...

    Java利用HttpClient模拟POST表单操作应用及注意事项

    在Java中,我们可以通过以下步骤使用HttpClient来模拟POST表单提交: 1. 引入依赖:确保你的项目中已经引入了Apache HttpClient库。通常,这可以通过Maven或Gradle的依赖管理实现。例如,在Maven中,可以在pom.xml...

    javascript模拟post提交隐藏地址栏的参数

    通过js模拟post提交 1:请求需要的参数过长,超过get允许的最大长度 2:想要隐藏地址栏的参数 //新创建一个form表单 [removed]('&lt;form name=myForm&gt;&lt;/form&gt;'); var myForm=document.forms['myForm']; ...

    java代码模拟http上传文件_代码_类包

    在HTTP中,文件上传通常使用POST方法,通过表单数据或者Multipart/form-data编码来发送。这种编码方式允许我们同时发送文本数据和二进制文件,是HTTP文件上传的标准。 在Java中,我们可以使用多种库来实现HTTP文件...

    Java模拟登录百度Demo

    本项目名为"Java模拟登录百度Demo",旨在通过Java编程语言实现对百度网站的自动登录功能。在这个教程中,我们将深入探讨如何使用Java来完成这一目标。 首先,模拟登录的核心是发送HTTP请求。在Java中,我们可以使用...

Global site tag (gtag.js) - Google Analytics