Android框架之AsyncHttpClient
原文来自http://www.jianshu.com/p/55337dfd311b
今天利用AsyncHttpClient框架实现将图片上传到服务器。
步骤和思路很简单主要分为三步:
将图片bitmap进行base64编码;
将编码后的String通过AsyncHttpClient上传给服务器的php;
php中将获取的String利用base64解码保存到服务器;
其中android端Java代码如下:
/*** 将图片上传到服务器* @param bt* 将拿到的bitmap进行base64编码* 利用AsyncHttpClient框架将编码后的字符传递上去* 在服务器php中接收,并保存在服务器中*/private void sendImage(Bitmap bt){ByteArrayOutputStream stream = new ByteArrayOutputStream();/*** 压缩图片* 第一个参数指定bitmap格式* 第二个参数压缩的比例* 第三个参数是输出流*/bt.compress(Bitmap.CompressFormat.JPEG, 60, stream);byte[] bytes = stream.toByteArray();//将bitmap进行Base64编码String img = new String(Base64.encode(bytes, Base64.DEFAULT));AsyncHttpClient cilent = new AsyncHttpClient();RequestParams params = new RequestParams();params.add("img", img);params.add("userName", userName);//这里由于需要,多传入了一个参数,读者可以忽略System.out.println("params"+params.toString());cilent.post(sendImageUrl, params, new AsyncHttpResponseHandler() {/*** 上传成功调用函数*/@Overridepublic void onSuccess(int arg0, Header[] arg1, byte[] arg2) {// TODO Auto-generated method stubToast.makeText(PersonalMessage.this, "上传成功", 1).show();}/*** 上传失败调用函数*/@Overridepublic void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {// TODO Auto-generated method stubToast.makeText(PersonalMessage.this, "上传失败", 1).show();}});}
服务器端php代码:
<?php$filename = "images/".$_POST['userName'];$file = fopen($filename.".jpg","w");$date = base64_decode($_POST['img']);fwrite($file,$date);fclose($file);?>
这样就OK了!