安卓图片上传实现

安卓的图片上传是一个非常常见的功能,我是这么实现的:通过bitmap转成base64字符串,传递base64字符串到后端接口,后端接口解码后保存在服务器上

安卓端:

private void uploadImage(Bitmap imgBitmap,String nameType) throws IOException {//上传图片到服务器,传入图片bitmap,编码

ByteArrayOutputStream stream = new ByteArrayOutputStream();
imgBitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);//这个函数进行图片的压缩,90是图片的压缩比例
byte[] byteArray = stream.toByteArray();
String encodedImage = Base64.encodeToString(byteArray, Base64.NO_WRAP);//注意,如果需要传到后台,这里一定要使用Base64.NO_WRAP,不然编码时会有\n进行换行,后端接受base64字符串的时候就不好解码了

map.clear();
map.put("photo", encodedImage);
map.put("nameType",nameType);

sendRequestThread=new SendRequestThread(UrlUtil.PDA_UPIMAGE,POST_TPUP,
ActionCodeUtil.UPLOADFAIL,handler,
map,new TypeToken<String>(){}.getType());
sendRequestThread.start();
}

服务端:

public static String base64ToJpg(String path,String base64,String nameType){//解码后保存在服务器上并返回图片地址
// 判断文件路径是否存在
File filePath = new File(path);
if (!filePath.exists()){
filePath.mkdirs();
}
// 创建文件
String jpgFile = path + "\\" + nameType + UUID.randomUUID() + ".jpeg";
File file = new File(jpgFile);
boolean jpgFileExist = false;
try {
jpgFileExist = file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
if (jpgFileExist){

base64 = base64.replaceAll(" ", "+");//注意,这里的base64需要将 空格 替换成 + (因为 + 在前后端传值的时候会被解析成 空格 ,解码出来就会失败)
// 解密
Base64.Decoder decoder = Base64.getDecoder();
// 去掉base64前缀 data:image/jpeg;base64,
//base64 = base64.substring(base64.indexOf(",", 1) + 1, base64.length());
byte[] b = decoder.decode(base64);
// 处理数据
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}

// 保存图片
try {
FileOutputStream out = new FileOutputStream(jpgFile);
out.write(b);
out.flush();
out.close();
// 写入成功返回文件路径
System.out.println(jpgFile);
return jpgFile;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return "error";
}
posted @   妞妞猪  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示