中文与base64互转(数字短信)
最近在做一个阿里云数字短信
短信内容包括文字、图片、视频、音频,比彩信高级一点点。
其中的文字、图片、视频、音频内容都需要转换成base64格式的文件来传输。
图片和媒体文件转base64没什么问题,有用到的小伙伴也可以参考下面的代码
// 上传图片
async function selectPicture() {
return new Promise(resolve => {
var file = $('<input type=file accept=".jpg,.png,.gif">');
$(file).change(async () => {
var reader = new FileReader();
reader.onloadend = () => {
console.log(file[0].files[0])
let Obj = {
fileSuffix: file[0].files[0].name.split('.')[1],
fileName: file[0].files[0].name,
fileSize: file[0].files[0].size,
fileContents: reader.result
}
console.log(Obj)
resolve(Obj);
};
reader.readAsDataURL(file[0].files[0]);
});
$(file).trigger('click');
});
}
// 上传媒体文件
async function selectVideo() {
return new Promise(resolve => {
var file = $('<input type=file accept=".mp4,.mp3">');
$(file).change(async () => {
var reader = new FileReader();
reader.onloadend = () => {
console.log(file[0].files[0])
let Obj = {
fileSuffix: file[0].files[0].type.split('/')[1],
fileName: file[0].files[0].name,
fileSize: file[0].files[0].size,
fileContents: reader.result
}
console.log(Obj)
resolve(Obj);
};
reader.readAsDataURL(file[0].files[0]);
});
$(file).trigger('click');
});
}
文字转base64就被坑了一把
刚刚开始时使用的是下面的方法
//字符串转base64
function encode(str){
// 对字符串进行编码
var encode = encodeURI(str);
// 对编码的字符串转化base64
var base64 = btoa(encode);
return base64;
}
// base64转字符串
function decode(base64){
// 对base64转编码
var decode = atob(base64);
// 编码转字符串
var str = decodeURI(decode);
return str;
}
乍一用似乎没什么毛病也转成base64的格式了,转成base64,base64转文字都没啥问题。(英文的不会有问题,中文的base64的结果其实是encode之后的内容),到了阿里那边的模板中就成了乱码。
定位到这个问题之后就引用了js-base64
// npm安装
$ npm install --save js-base64
// 引入使用
import {Base64} from 'js-base64';
// 文字转base64
Base64.toBase64(str);
// base64转文字
Base64.fromBase64(base64)
亲测没什么毛病,希望有缘人能用的上。