1、头像上传
头像上传功能,一般我们会使用文件的输入输出流上传。但是在Android开发中,如果我们的某一个应用,不会经常使用到文件上传这样的功能,写很多与文件上传和下载有关的代码,似乎有些不太划算,那么,我们可不可以将文件转换为字符串,然后再进行上传呢?答案是可以的,笔者将这种方法使用在了本人的项目中,非常成功,减轻了大量的代码工作量,简化了逻辑。
2、背景说明
在开始提出这个需求的时候,笔者本身也是想着使用文件的上传功能,不过在项目中使用了Volley这个框架,它本身并不支持文件的上传,这就很坑爹了。Volley官方的文档中说,不推荐使用volley上传较大的数据。那么,笔者就在想,一个头像应该算不上什么大的文件了吧?于是,这样的一个想法就出来了:将文件转换为字符串,然后作为参数进行上传。
3、保存图片
这里有一个保存图片的方法,如下:
/**
* 保存图片
* @param bitmap
* @throws IOException
*/
public static void saveBitmap(Bitmap bitmap) throws IOException{
mImageFile = new File(Environment.getExternalStorageDirectory() + "/temp.png");
FileOutputStream out;
try{
out = new FileOutputStream(mImageFile);
if(bitmap.compress(Bitmap.CompressFormat.PNG, 70, out)){
out.flush();
out.close();
}
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
4、转换图片
我们的目的是将图片转换为字符串,代码如下:
/**
* 图片文件转换为指定编码的字符串
*
* @param imgFile 图片文件
*/
public static String file2String(File imgFile) {
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try{
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e){
e.printStackTrace();
}
//对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
String result = encoder.encode(data);
return result;//返回Base64编码过的字节数组字符串
}
5、头像上传
这里就不提供详细的代码了,上面的代码已经是从笔者真实的项目中抽出的。这里仅仅提供一个思路吧,可以将上面的字符串,当作参数与其它字符串拼接在一起,作为参数传递给服务器,然后又服务器解析,再进行转换就可以得到真实的图片数据,转换为图片数据。