安卓开发:以Base64字符串形式上传文件——从Android选择文件并上传

简述

在常规的web开发过程中,大部分上传文件都是在web页面端通过表单直接提交,再由服务器端捕获请求来进行处理的。但是在前后端分离趋于一种流行趋势,再加上Android和iOS开发技术日渐成熟,大部分团队都会选择在服务器端仅提供一套通用的webservice数据接口,而web页面、Android和iOS统一都通过这套数据接口来向服务器发送请求和获取数据。
在这一过程中,大部分的webservice数据接口都会采用xml数据格式或是json数据格式来进行数据请求和处理,在这种情况下,其实来自客户端的请求就可以看作是一个字符串(无论是xml还是json数据)。此时,常规的数据提交完全不存在任何问题,但是附件上传就需要特殊处理了。

本文简单介绍了如何在Android中选择本地文件,并向服务器发送上传请求,以字符串的形式将文件上传到服务器。

我们以上传相册中的照片为例,因为通过手机上传图片是最为常见的一种应用场景。
关于如何在Android中获取相册中的照片,或是调用摄像头拍摄照片,请查看以下文章:
安卓开发:从系统相册选择照片
安卓开发:使用手机拍照功能

一、获取文件的内容,并转换成Base64的字符串

我们以图片为例,假设我们已经获得了图片对象:
Bitmap bitMap;//图片文件对象

然后,我们需要获得该文件的byte数组形式的内容数据:
ByteArrayOutputStream bos=new ByteArrayOutputStream();
bit.compress(Bitmap.CompressFormat.JPEG, 40, bos);//第二个入参表示图片压缩率,如果是100就表示不压缩
byte[] bytes=bos.toByteArray();

最后,将byte数组转换为base64字符串:
String s = Base64.encodeToString(bytes, Base64.DEFAULT);

可以将上面的代码片段封装为一个方法,只要传入图片对象,返回字符串即可:
/**
 * 通过Base32将Bitmap转换成Base64字符串
 * @param bit
 * @return
 */
public String Bitmap2StrByBase64(Bitmap bit){
	ByteArrayOutputStream bos=new ByteArrayOutputStream();
	bit.compress(Bitmap.CompressFormat.JPEG, 40, bos);//第二个入参表示图片压缩率,如果是100就表示不压缩
	byte[] bytes=bos.toByteArray();
	return Base64.encodeToString(bytes, Base64.DEFAULT);
}
在该方法的返回值中,我们得到了字符串形式的图片内容,接下来就是把这个内容发送到服务器了。

二、向服务器发送请求

关于如何向服务器发送请求,请参考以下文章:
安卓开发:使用AsyncTask异步向服务器发起request请求

你可能感兴趣的:(Android,android,异步,字符串,上传附件,base64)