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

在android项目中,很多情况下上传头像的需求,像qq,新浪微博,微信,飞信等很多应用都有这样的功能。

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

完整源码下载

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
      * 上传图片
      */
     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编码格式传送到服务器,而服务器端的代码也是非常简单的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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盘下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值