在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() {@Overridepublic 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 blocke.printStackTrace();}}@Overridepublic 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 blocke.printStackTrace();}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}

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


更多相关文章

  1. Android实现从相册截图的功能
  2. Android用户请注意,你的相机正在偷偷开启并拍照摄像!
  3. android studio 适配android7.0 android 6.0拍照调用系统裁剪工
  4. 让我的头像圆起来--Android之圆头像 .
  5. Android(安卓)系统拍照及打开系统相册 完美适配 Android(安卓)4
  6. 为什么说在Android中请求权限从来都不是一件简单的事情?
  7. 东拼西凑写的android 相机例子,包含一些遇到的坑
  8. android拍照上传到服务器端
  9. Android中读取系统图库(包含相册)中的图片,显示图片与图片的路径

随机推荐

  1. Android(安卓)UI开发第二十三篇――分享
  2. Android(安卓)蓝牙开发浅析
  3. Setting up proxy for Android(安卓)Emul
  4. Android(安卓)app中调用启动其他应用(系统
  5. Android开发资料集合
  6. 2010.11.15———android spinner下拉列
  7. JohnTsai的Android开发周报(一)
  8. Android(安卓)UI 学习
  9. android 简单实用的Log打印类封装,助你快
  10. Android中文API(135) —— SQLiteCursorDri