Android进阶2之新浪微博采用Oauth发送图片和文字

本以为新浪发布图片和发布文字一样的简单,但很悲剧。。。。。。。远不是想象的那样。

现在分享一下代码。

/**
	 * 发表带图片的微博
	 * 
	 * @param token
	 * @param tokenSecret
	 * @param status
	 *            发表的内容
	 * @param urlPath
	 *            图片的地址   本函数没有用到,我直接在函数中创建的。
	 * @return
	 */
	public static void uploadStatus(String token, String tokenSecret, String imageUrl, String status)
	{
		File files = Environment.getExternalStorageDirectory();
		String sdPath = files.getAbsolutePath();
		// 请保证SD卡根目录下有这张图片文件
		String urlPath = sdPath + "/" + "c.jpg";
		File imageFile = new File(urlPath);
		if (!imageFile.exists())
		{
			System.out.println("没有该图片");
		}
		httpOauthConsumer = new DefaultOAuthConsumer("你的AppKey","你的AppSecret");//记得用你的替换一下
		httpOauthConsumer.setTokenWithSecret(token, tokenSecret);//token tokenSecret之前工作的任务
		try
		{
			URL url = new URL(Constants.XinLangUpload);//URL:http://api.t.sina.com.cn/statuses/upload.json
			HttpURLConnection request = (HttpURLConnection) url.openConnection();
			request.setDoOutput(true);
			request.setRequestMethod("POST");
			HttpParameters httpParameters = new HttpParameters();
			httpParameters.put("status", 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(imageFile);
			byte[] file = new byte[(int) imageFile.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
							+ imageFile.length() + end_data.length)); // 设置内容长度
			httpOauthConsumer.setAdditionalParameters(httpParameters);
			httpOauthConsumer.sign(request);
			OutputStream outputStream = request.getOutputStream();
			outputStream.write(content.getBytes());
			outputStream.write(status.getBytes());
			outputStream.write(pic.getBytes());
			outputStream.write(file);
			outputStream.write(end_data);
			outputStream.flush();
			outputStream.close();
			request.connect();
			if (200 == request.getResponseCode())
			{
				System.out.println("发布成功");
			}
			else
			{
				System.out.println("异常code:" + request.getResponseCode());
			}
		}
		catch (Exception e1)
		{
			e1.printStackTrace();
		}
	}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值