原文来自http://www.jianshu.com/p/55337dfd311b

今天利用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代码:


<?php

$filename = "images/".$_POST['userName'];

$file = fopen($filename.".jpg","w");

$date = base64_decode($_POST['img']);

fwrite($file,$date);

fclose($file);

?>

这样就OK了!


scu酱油仔
1.3k 声望31 粉丝

没有努力过就没有资格说自己运气不好