今天利用AsyncHttpClient框架实现将图片上传到服务器。
步骤和思路很简单主要分为三步:
1,将图片bitmap进行base64编码;
2,将编码后的String通过AsyncHttpClient上传给服务器的php;
3,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() {
/**
* 上传成功调用函数
*/
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
Toast.makeText(PersonalMessage.this, "上传成功", 1).show();
}
/**
* 上传失败调用函数
*/
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
Toast.makeText(PersonalMessage.this, "上传失败", 1).show();
}
});
}
服务器端php代码:
$filename = "images/".$_POST['userName'];
$file = fopen($filename.".jpg","w");
$date = base64_decode($_POST['img']);
fwrite($file,$date);
fclose($file);
?>
这样就OK了!