`
lmx227
  • 浏览: 52345 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Http Post上传图片

 
阅读更多

 

String filepath = "/storage/sdcard0/ShareSDK/cn.sharesdk.demo/cache/pic_glance_back.jpg";
	
	/**
	 * 上传图片
	 * 
	 * @param urlStr 上传服务器地址
	 * @param textMap
	 * @param fileMap
	 * @return
	 */
	public 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);
					String contentType = getContentType(inputValue);
					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;
	}
	
	/**
	 * 获取文件类型
	 * @param path
	 * @return
	 */
	private String getContentType(String path)
	{
		File file = new File(path);  
		String type = null;
		try {
			type = file.toURL().openConnection().getContentType();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return type;
	}

 

 使用:

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(ContactCons.URL_GET_UPLOAD_PHOTO_URL, textMap, fileMap);
				Log.d("", ret);

 

分享到:
评论

相关推荐

    http post 上传图片 原生

    总的来说,原生的HTTP POST上传虽然没有第三方库那么方便,但具有更好的控制力和更低的依赖性,适合对性能有较高要求或对第三方库有特殊限制的项目。在实际应用中,应根据项目需求选择合适的实现方式。

    c版本的http post 上传/下载文件/JSON

    本文将详细介绍如何在C语言环境中实现HTTP POST请求、文件的上传与下载以及JSON数据的解析。 首先,让我们关注"HTTP POST"。POST请求是HTTP协议中的一个方法,用于向服务器发送数据,通常用于提交表单或上传文件。...

    Qt之 Post方法上传图片到服务器两种方式Base64流和File

    在Qt框架中,进行HTTP POST请求来上传图片到服务器主要有两种常见的方式:Base64编码流和直接上传文件。这两种方法各有优缺点,适用于不同的场景。下面将详细讲解这两种方式的实现过程及其特点。 首先,我们来看...

    易语言POST百度上传图片

    总结,使用易语言实现POST百度上传图片涉及到对HTTP协议的理解,易语言编程基础,网络请求的构建,以及错误处理和调试技能。掌握这些知识点,不仅可以完成图片上传任务,也为其他类似网络操作提供了基础。对于初学者...

    易语言post图片上传

    本知识点聚焦于使用易语言进行POST方式的图片上传操作,这是一种常见的网络数据传输方法,尤其在网页表单提交、文件上传等场景中广泛应用。 在Web开发中,POST请求常用于向服务器发送数据,包括文本、图片等各种...

    http post方式上传文件(C#)

    在IT行业中,HTTP POST方式是常见的一种数据提交方式,尤其在文件上传场景中。C#作为.NET框架的主要编程语言,提供了强大的支持来实现这个功能。本文将深入探讨如何使用C#进行HTTP POST方式的文件上传,并关注一些...

    C代码版本的HTTP POST上传文件/JSON

    本主题聚焦于使用C语言实现HTTP POST方法上传文件和发送JSON数据,这对于开发嵌入式系统、移动应用后端或者任何需要轻量级网络交互的项目来说尤其有用。 HTTP POST方法通常用于向服务器发送数据,比如用户填写的...

    httpClient post 上传 下载 图片

    在本场景中,我们关注的是"httpClient post 上传图片"以及"下载图片"的操作。下面将详细介绍如何使用HttpClient进行图片的上传和下载,并探讨如何修改上传和下载的URI。 1. **HttpClient上传图片**: - 首先,我们...

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

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

    跨域post上传图片

    在Web开发中,"跨域post上传图片"是一项常见的需求,尤其在用户需要在网站上上传个人头像或分享照片时。"跨域"是指一个域下的文档或脚本尝试请求另一个域下的资源,由于浏览器的同源策略限制,这种行为通常会被禁止...

    unity通过http上传图片到服务器

    本文将详细讲解如何在Unity中利用HTTP请求上传图片到服务器,这里以Tomcat服务器为例。 首先,Unity提供了UnityWebRequest(UWR)类来处理HTTP请求,它是Unity 5.5版本后引入的,用于替换过时的WWW类。UWR支持异步...

    QT通过HTTP实现图片实时上传和下载并显示源代码实例

    在本实例中,我们将探讨如何使用QT通过HTTP协议来实现图片的实时上传、下载及显示。这涉及到QT中的网络模块,包括QNetworkAccessManager、QNetworkRequest、QNetworkReply等关键类。 首先,要实现图片的HTTP上传,...

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

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

    android 拍照上传 SD卡图片上传 Httppost上传

    以上就是Android应用中从SD卡选择图片并使用HTTP POST上传的基本步骤。注意,在实际项目中,还需要处理网络错误、进度显示、上传状态回调等功能,以提供更好的用户体验。同时,为了兼容不同的Android版本,可能需要...

    基于C语言Http请求上传文件到服务器与下载文件的源代码

    对于文件上传,我们通常会使用HTTP的POST方法。这个过程涉及以下几个步骤: 1. 创建套接字:使用socket()函数创建一个网络套接字。 2. 连接服务器:使用connect()函数连接到服务器的指定端口。 3. 构建HTTP请求:...

    iOS通过http post上传图片

    在iOS开发中,上传图片至服务器通常...总之,iOS通过HTTP POST上传图片涉及网络请求、数据编码、多部分表单数据的构建以及服务器响应的处理。通过理解这些概念和操作,开发者能够实现将图片安全地上传到服务器的功能。

    c# .net后台post上传文件

    以上就是关于"C# .NET后台post上传文件"这一主题的主要知识点,包括HTTP POST请求、ASP.NET MVC框架的应用、文件上传的前端和后端处理、图片处理、存储策略以及安全性和异常处理等方面。在实际开发中,这些知识点将...

    httpclient使用post方法上传多个图片个其他参数的demo源码

    HttpPost httpPost = new HttpPost("http://example.com/upload"); ``` 3. **MultipartEntityBuilder**:对于文件上传,我们通常使用多部分表单数据(Multipart Form Data)。这里需要用到`...

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

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

Global site tag (gtag.js) - Google Analytics