1.图片还好,转Base64时没有出现啥大的问题.

2.视频转Base64时,打印出来的log日志   Base64码只有前半部分,后面相当一大部分base64码都没有.  一开始以为转码代码问题.

解决方法(很狗血):

在转完Base64码时,将Base64字符串写入到本地,在从本地中读取出来,这时的Base64码是一个完整的码,没有丢失的.

注:为啥丢失没搞懂.

1.图片转Base64.

/**
* bitmap转成base64.
* @param bitmap
* @return
*/
public static String bitmapToBase64(Bitmap bitmap) {

String result = null;
ByteArrayOutputStream baos = null;
try {
if (bitmap != null) {
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

baos.flush();
baos.close();

byte[] bitmapBytes = baos.toByteArray();
result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.flush();
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}

2.文件(File)转Base64:

注:这个方法是需要导入一个Jar包的,不然BASE64Encoder()报错.      jar包可以私聊我要(那些收费下载的 啥啥啥)。.

* 文件转Base64. * @param path * @return * @throws Exception public static String fileToBase64(String path) throws Exception { File file = new File(path); FileInputStream inputFile = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()]; inputFile.read(buffer); inputFile.close(); return new BASE64Encoder().encode(buffer);

注:这个方法不需要jar包

* 文件转Base64. * @param filePath * @return public static String file2Base64(String filePath) { FileInputStream objFileIS = null; try { objFileIS = new FileInputStream(filePath); } catch (FileNotFoundException e) { e.printStackTrace(); ByteArrayOutputStream objByteArrayOS = new ByteArrayOutputStream(); byte[] byteBufferString = new byte[1024]; try { for (int readNum; (readNum = objFileIS.read(byteBufferString)) != -1; ) { objByteArrayOS.write(byteBufferString, 0, readNum); } catch (IOException e) { e.printStackTrace(); String videodata = Base64.encodeToString(objByteArrayOS.toByteArray(), Base64.DEFAULT); return videodata;

3.将字符串写入本地文件:

* 将字符串写入到指定文件. * @param content * @param context public static void saveToFile(String content, Context context) { BufferedWriter out = null; //获取SD卡状态 String state = Environment.getExternalStorageState(); //判断SD卡是否就绪 if (!state.equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(context, "请检查SD卡", Toast.LENGTH_SHORT).show(); return; //取得SD卡根目录 File file = Environment.getExternalStorageDirectory(); try { if (file.exists()) { Log.e("print", "file路径:" + file.getCanonicalPath()); //输出流的构造参数1:可以是File对象 也可以是文件路径 //输出流的构造参数2:默认为False=>覆盖内容; true=>追加内容 out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file.getCanonicalPath() + "/VideoBase64.txt", true))); out.newLine(); out.write(content); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace();

4.从本地文件读取内容:

* 从SD卡读取指定文件. * @param context * @return public static String readFromFile(Context context) { //读的时候要用字符流 万一里面有中文 BufferedReader reader = null; FileInputStream fis; StringBuilder sbd = new StringBuilder(); String state = Environment.getExternalStorageState(); if (!state.equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(context, "SD卡未就绪", Toast.LENGTH_SHORT).show(); return ""; File root = Environment.getExternalStorageDirectory(); try { fis = new FileInputStream(root + "/VideoBase64.txt"); reader = new BufferedReader(new InputStreamReader(fis)); String row; while ((row = reader.readLine()) != null) { sbd.append(row); } catch (FileNotFoundException e) { Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); return sbd.toString(); 说明:1.图片还好,转Base64时没有出现啥大的问题.2.视频转Base64时,打印出来的log日志   Base64码只有前半部分,后面相当一大部分base64码都没有.  一开始以为转码代码问题.   解决方法(很狗血):          在转完Base64码时,将Base64字符串写入到本地,在从本地中读取出来,这时的Base64码是一个完整的码,没有丢失的.    ...
图片 上传时,后台接收的方式有好几种,可以直接接收 File 对象,有时候要求将 图片 Base64 编码以字符串的形式传给服务器。 这里我们说一下 Base64 会遇到的问题。 ByteArrayOutputStream bos = new ByteArrayOutputStream(); //将bitmap 成字节数组流. boolean compress = bitmap.compress(Bitma...
public static String file To Base64 ( File file ) { String base64 = null; InputStream in = null; try { in = new File InputStream( file ...
最近遇到需求是前后端传输 图片 使用的是 Base64 ,但是前端( Android 端) 图片 很大(尺寸很大4480 × 2520,质量也很大7-10M),需要压缩到一定尺寸(1280 × 960,当然还可以压得更小),然后传给后端,本来认为是一个简单的压缩,可是在子线程压缩过程中发现很卡,卡的主线程的进度条都走不动了,一开始用的模拟器测试的,以为模拟器性能比较差,可是换成手机测试,还是子线程压缩过程中很卡,卡的主线程的进度条都走不动了。为了解决这个问题,请看以下步骤: 1、先申请读写权限,要允许权限才可以进行之后
public static String imageTo Base64 (String path){ if(TextUtils.isEmpty(path)){ return null; InputStream is = nu... public static String file To Base64 ( File file ) { String base64 = null; InputStream in = null; try { in = new File InputStream(fil...
在项目中需要用到 文件 传输入,为了传输方便最好的办法是将 文件 base64 字串,再将 base64 字串 成字节流保存在 文件 了。 不过这种做法的虽然简单,但还是要根据实际需要进行选择;弊端是不能 太大的 文件 文件 太大会造成效率上的问题。具体多大,笔者没有做深入研究和实际测试。如有兴趣,可以自己深入研究测试。 需要导入 import android .util. Base64 ; {CSDN:C
项目中经常会用到上传 图片 / 视频 的地方,比如上传头像,上传商品 图片 、证件 图片 、小 视频 等等,我们需要将 图片 base64 后再提交给后台,然后后台再将 base64 图片 后进行保存,这里是基于vue+vux来写的,H5实现的基本逻辑也是一样的,样式部分省略。 一、 图片 上传 1、html部分 <template> <div class="index"> &lt...
在工作中,前端上传 视频 或者大 文件 的时候,由于 文件 过大,上传时间过长,我们需要对 文件 进行一个切片的处理,然后上传片数,最后由后端整合,但是也有一些 视频 类的 文件 会被防火墙拦截,这就需要我们 化成 base64 格式上传了, 首先我们要知道, 文件 是以Blob的数据类型存在的,Blob有一个特点,就是支持分割, 关于Blob可以参考Blob - Web API 接口参考 | MDN来理解 先上一段简单的代码 //首先是切割 文件 var blob = file ; var a...