您的位置:首页 > 移动开发 > Android开发

android头像相册/拍照选取,裁剪及上传综合案例

2014-01-04 15:03 746 查看
在android项目中,很多情况下上传头像的需求,像qq,新浪微博,微信,飞信等很多应用都有这样的功能。

之前我写过的两篇文章:andorid下从相册选取/拍照选取一张相片并剪切android下Bitmap和base64之间的转换把他们综合起来,就可以来实现头像从相册/拍照选取,后裁剪再上传的功能

完整源码下载

这里我只贴出上传图片的方法代码,至于怎么获取到获取到图片,请看andorid下从相册选取/拍照选取一张相片并剪切

/*
* 上传图片
*/
public void upload(View view) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
byte[] buffer = out.toByteArray();

byte[] encode = Base64.encode(buffer, Base64.DEFAULT);
String photo = new String(encode);

RequestParams params = new RequestParams();
params.put("photo", photo);
String url = "http://110.65.99.66:8080/jerry/UploadImgServlet";

AsyncHttpClient client = new AsyncHttpClient();
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
try {
if (statusCode == 200) {

Toast.makeText(MainActivity.this, "头像上传成功!", 0)
.show();
} else {
Toast.makeText(MainActivity.this,
"网络访问异常,错误码:" + statusCode, 0).show();

}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
Toast.makeText(MainActivity.this,
"网络访问异常,错误码  > " + statusCode, 0).show();

}
});

} catch (Exception e) {
e.printStackTrace();
}
}


从上边代码可以看出,又用到我钟爱的android-async-http 安卓异步http框架来访问网络

这样一操作,图片就会按Base64编码格式传送到服务器,而服务器端的代码也是非常简单的

package com.jerry.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
import com.sun.org.apache.xml.internal.security.utils.Base64;

public class UploadImgServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
String photo = request.getParameter("photo");
try {
// 对base64数据进行解码
byte[] decode = Base64.decode(photo);
File file = new File("e:\\decode.jpg");
if(!file.exists()) {
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
out.write(decode);
out.flush();
out.close();
} catch (Base64DecodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doGet(request, response);
}

}


这样图片就成功的保存带E盘下



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息