[置顶] android头像相册/拍照选取,裁剪及上传综合案例
16lz
2021-01-26
在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盘下
更多相关文章
- Android实现从相册截图的功能
- Android用户请注意,你的相机正在偷偷开启并拍照摄像!
- android studio 适配android7.0 android 6.0拍照调用系统裁剪工
- 让我的头像圆起来--Android之圆头像 .
- Android(安卓)系统拍照及打开系统相册 完美适配 Android(安卓)4
- 为什么说在Android中请求权限从来都不是一件简单的事情?
- 东拼西凑写的android 相机例子,包含一些遇到的坑
- android拍照上传到服务器端
- Android中读取系统图库(包含相册)中的图片,显示图片与图片的路径