`

Android:SNS客户端开发八:发送带图片的微博(二)(发送多媒体的post方法)

 
阅读更多

      好了,之前我们已经获取到了需要发送的图片存在于手机中的路径,也就是上一篇文章中的picPath,那么我们今天通过这个路径将图片发出去。

     先看新浪微博对发送图片的说明:http://open.weibo.com/wiki/Statuses/upload在注意事项中新浪写到:上传图片需要采用multipart/form-data方式提交pic参数,并且放在POST请求的body里。另外,只有以oauth_开头的参数才需要参加OAuth的签名。

      我们可以采取两种方法来实现这样的一个post方法,1、通过HttpURLConnectiion自己构造一个http请求的全部内容2、同样是通过HttpClient开源项目,但是我们需要添加一个额外的包,包名为:httpmine-4.X,大家可以自行下载。

      首先给出第一种方法,此处参考http://www.itivy.com/android/archive/2011/7/6/android-weibo-oauth-send-text-and-image.html给出的方法实现,特别感谢。

/*
 * 新浪微博发送图片post方法,自己构造相应的请求内容
 */
	public String uploadStatus(File aFile, String status, String urlPath)
			throws OAuthMessageSignerException,
			OAuthExpectationFailedException, OAuthCommunicationException,
			IOException {
		OAuthConsumer httpOAuthConsumer = new DefaultOAuthConsumer(
				consumer.getConsumerKey(), consumer.getConsumerSecret());
		httpOAuthConsumer.setTokenWithSecret(consumer.getToken(),
				consumer.getTokenSecret());
		String result = null;

		URL url = new URL(urlPath);
		HttpURLConnection request = (HttpURLConnection) url.openConnection();
		request.setDoOutput(true);
		request.setDoInput(true);
		request.setRequestMethod("POST");
		HttpParameters para = new HttpParameters();
		para.put("status",
				URLEncoder.encode(status, "utf-8").replaceAll("\\+", "%20"));
		// para.put("source",URLEncoder.encode(status,
		// "utf-8").replaceAll("\\+", "%20"));
		String boundary = "---------------------------37531613912423";
		String content = "--" + boundary
				+ "\r\nContent-Disposition: form-data; name=\"status\"\r\n\r\n";
		String pic = "\r\n--"
				+ boundary
				+ "\r\nContent-Disposition: form-data; name=\"pic\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n";
		byte[] end_data = ("\r\n--" + boundary + "--\r\n").getBytes();
		FileInputStream stream = new FileInputStream(aFile);
		byte[] file = new byte[(int) aFile.length()];
		stream.read(file);
		request.setRequestProperty("Content-Type",
				"multipart/form-data; boundary=" + boundary); // 设置表单类型和分隔符
		request.setRequestProperty(
				"Content-Length",
				String.valueOf(content.getBytes().length
						+ status.getBytes().length + pic.getBytes().length
						+ aFile.length() + end_data.length)); // 设置内容长度
																//          
		// 下面的步骤是对请求进行签名。
		httpOAuthConsumer.setAdditionalParameters(para);
		httpOAuthConsumer.sign(request);
		//讲相应的请求参数写入到entity中
		OutputStream ot = request.getOutputStream();
		ot.write(content.getBytes());
		ot.write(status.getBytes());
		ot.write(pic.getBytes());
		ot.write(file);
		ot.write(end_data);
		ot.flush();
		ot.close();
		request.connect();
		InputStream is = request.getInputStream();
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		String line = null;
		StringBuffer sb = new StringBuffer();
		while ((line = reader.readLine()) != null) {
			sb.append(line);
		}
		result = sb.toString();
		System.out.println("reuslt---->" + result);
		System.out.println(request.getResponseMessage());
		/*
		 * if (200 == request.getResponseCode()) { result = "SUCCESS"; }
		 */

		return result;
	}

 

 

 

构造原理,在新浪微博注意事项中已经写的十分清楚,此处就不再做过多的解释。这里尤其值得注意的是:写入的占位符\r\n等均不可缺少,不然无法构造正确的请求内容。

第二种方法:

/*
 * 新浪微博发送图片post方法
 */
	public String doPostWithMultipart(String url,List<NameValuePair> pairs,String pic) throws IllegalCharsetNameException, UnsupportedCharsetException, ClientProtocolException, IOException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException{
		HttpPost postRequest = new HttpPost(url);
		MultipartEntity reqEntity = new MultipartEntity();
		for(NameValuePair p:pairs){
			reqEntity.addPart(p.getName(),new StringBody(p.getValue(),Charset.forName("UTF-8")));
		}
		FileBody filebody = new FileBody(new File(pic),"image/jpeg");
		reqEntity.addPart("pic",filebody);
		postRequest.setEntity(reqEntity);
		consumer.sign(postRequest);
		HttpClient httpclient = new DefaultHttpClient();
		HttpResponse response = null;
		response = httpclient.execute(postRequest);
		String result = ApacheUtils.getResponseText(response);
		return result;
		
	}

 

 

两种方法均可使用

 

 

 

 

 

 

2
0
分享到:
评论
2 楼 adapt_x 2012-05-08  
httpmine-4.X
楼主,请问这个jar包在哪里下载啊??可以发给我吗?
或者你可以发的全部代码给我吗??
1 楼 codeMoe 2012-03-22  
请问这个方法在我选择图片后返回本界面时使用可以吗

相关推荐

    Android:SNS客户端开发八:发送带图片的微博

    Android:SNS客户端开发八:发送带图片的微博 第一种方法

    基于安卓Android的SNS社交网络客户应用需求调研报告范本.pdf

    通过深入研究用户需求,借鉴微信和米聊的优点,克服其不足,我们期望开发出的Android版新浪微博客户端不仅能提供基本的社交功能,更能以用户为中心,打造一个高效、便捷、个性化的社交环境。这不仅符合时代创新的...

    android客户端与SNS网站接入细节备忘录

    本文档主要介绍了在2012年7月期间,针对Android客户端如何与开心网、腾讯微博、新浪微博、人人网等SNS网站进行集成的一些关键点和注意事项。 #### 二、接入前的准备 1. **获取APPID/API Key/Secret Key**:在接入...

    基于安卓Android的SNS社交网络客户应用需求调研报告.doc

    因此,开发一款专注于用户体验、无广告干扰、界面新颖的基于Android的新浪微博客户端显得尤为必要。 四、微博的特点 1. 低准入门槛:微博以简洁的文字形式允许用户快速发布信息,无需复杂的写作技巧。 2. 即时通讯...

    Android新浪微博分享

    在Android应用开发中,集成新浪微博分享功能是一项常见的需求,它可以让用户方便地将应用内的内容发布到自己的新浪微博账号上,从而提升用户体验并增加用户互动。本文将深入探讨如何实现这一功能,包括所需的库、API...

    iPhone & Android 智能手机客户端软件技术方案

    iPhone和Android智能手机客户端软件技术方案主要针对的是集成了Web2.0技术,并融合了BBS、SNS、博客、微博等多种网络应用的大学生互动网站。方案从整体上讲解了客户端开发的方式、系统支持的运行版本,以及技术方案...

    SNS.rar_ sns_SNS_android_社交网络

    2. **RESTful API设计**:服务器端可能提供了RESTful风格的API,客户端通过发送GET、POST等请求来获取或提交数据,如登录、发表动态、获取好友列表等。 3. **JSON数据解析**:服务器返回的数据通常以JSON格式传输,...

    毕业设计-基于安卓android的sns社交网络客户应用需求调研报告.doc

    这份调研报告针对的是基于 Android 的 SNS(Social Networking Service)社交网络客户应用的需求分析,旨在开发一款满足用户需求的、无广告干扰的新浪微博客户端。 一、同类产品分析 1. 微信: 微信是一款集多功能...

    人人都玩开心网:Ext+JS+Android+SSH整合开发Web与移动SNS

    《人人都玩开心网:Ext+JS+Android+SSH整合开发Web与移动SNS》这本书主要聚焦于构建社交网络服务(SNS)平台,通过结合多种技术实现Web端和移动端的应用开发。以下是书中涉及的主要知识点: 1. **EXT.JS**: EXT....

    中国的SNS路径?(之二)新浪微博不是Twitter.docx

    1. **融合媒体的创新**:与Twitter不同的是,新浪微博在设计之初就融入了多媒体元素,如图片、视频等。这种融合不仅增强了用户体验,还提升了信息的传播效率。 2. **社交媒体的新形态**:新浪微博不仅提供了类似...

    于基安卓android的sns社交网络客户应用需求调研报告--大学毕设论文.doc

    综上所述,为了满足Android用户对于SNS社交应用的需求,开发者需要关注用户体验、功能实用性以及与现有社交网络的融合,打造出一个功能齐全、用户界面友好、交互性强的微博客户端。通过这样的应用,用户不仅可以方便...

    Android---Douban-SNS.zip_android_android sns

    在Android平台上,开发一款社交网络应用(SNS)如豆瓣网的移动客户端,涉及到许多关键技术和概念。这个项目"Android---Douban-SNS.zip"很可能是为了教学或实践目的,提供了一个完整的讲解和源代码资源,让我们来深入...

    开源微博SNS路过插件

    路过插件.开源sns必备插件。

    基于安卓android的sns社交网络客户应用需求调研报告-本科论文.doc

    本报告主要针对基于 Android 的 SNS(Social Networking Service)社交网络客户应用进行需求调研,旨在开发一款满足用户需求的、无广告干扰的、具有创新界面设计的新浪微博客户端。 一、同类产品分析 1. 微信: ...

    电子商务案例分析:SNS平台案例.ppt

    电子商务案例分析:SNS平台案例.ppt

    基于安卓Android的SNS社交网络客户应用需求调研报告范本.docx

    【基于安卓Android的SNS社交网络客户应用需求调研报告】 SNS社交网络客户应用是指在移动设备上,尤其是基于Android操作系统上的社交应用。这类应用旨在提供用户之间方便、快捷的交流平台,通常包括文字、图片、语音...

    于基安卓android的sns社交网络客户应用需求调研报告大学论文.doc

    现有的Android微博客户端虽功能完备,但广告繁多和界面设计保守导致用户满意度不高,因此开发一款优化用户体验、无广告的微博客户端显得尤为必要。 微博作为一种微型博客,具有准入门槛低、即时通讯和强互动性的...

    微博通Air版

    目前支持:新浪微博、腾讯微博、搜狐微博、网易微博、百度说吧、139说客、嘀咕、饭否、做啥、人间网、天涯微博、人民微博、新华微博、Google Buzz、豆瓣、凤凰微博、开心网、人人网、和讯微博、中金微博、Follow5、...

    大话企业级Android应用开发实战 PDF 完整版 ZIP.002(二个压缩包)

    Android娱乐多媒体软件、赶集网手机客户端、移动办公、来电管理器、短信监控器、电话监控器、手机安全软件、手机守护神、新浪微博客户端、贪吃蛇游戏、数独游戏。 Java虚拟机实现、基于分布式架构的大型B2C电子商务...

Global site tag (gtag.js) - Google Analytics