今天利用AsyncHttpClient框架實(shí)現(xiàn)將圖片上傳到服務(wù)器。
步驟和思路很簡(jiǎn)單主要分為三步:
1躬充,將圖片bitmap進(jìn)行base64編碼;
2,將編碼后的String通過AsyncHttpClient上傳給服務(wù)器的php譬胎;
3,php中將獲取的String利用base64解碼保存到服務(wù)器命锄;
其中android端Java代碼如下:
/**
* 將圖片上傳到服務(wù)器
* @param bt
* 將拿到的bitmap進(jìn)行base64編碼
* 利用AsyncHttpClient框架將編碼后的字符傳遞上去
* 在服務(wù)器php中接收堰乔,并保存在服務(wù)器中
*/
private void sendImage(Bitmap bt)
{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
/**
* 壓縮圖片
* 第一個(gè)參數(shù)指定bitmap格式
* 第二個(gè)參數(shù)壓縮的比例
* 第三個(gè)參數(shù)是輸出流
*/
bt.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] bytes = stream.toByteArray();
//將bitmap進(jìn)行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);//這里由于需要,多傳入了一個(gè)參數(shù)脐恩,讀者可以忽略
System.out.println("params"+params.toString());
cilent.post(sendImageUrl, params, new AsyncHttpResponseHandler() {
/**
* 上傳成功調(diào)用函數(shù)
*/
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
Toast.makeText(PersonalMessage.this, "上傳成功", 1).show();
}
/**
* 上傳失敗調(diào)用函數(shù)
*/
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
Toast.makeText(PersonalMessage.this, "上傳失敗", 1).show();
}
});
}
服務(wù)器端php代碼:
<?php
$filename = "images/".$_POST['userName'];
$file = fopen($filename.".jpg","w");
$date = base64_decode($_POST['img']);
fwrite($file,$date);
fclose($file);
?>
這樣就OK了镐侯!