js如何判断一个字符串是否是base64字符串?

比方说图片上传,有file对象、blob对象和base64,如果是base64,怎么准确判断这个字符串是base64呢?如果不是图片是其他类型的呢?

阅读 22.3k
3 个回答
function isBase64(str) {
    if (str ==='' || str.trim() ===''){ return false; }
    try {
        return btoa(atob(str)) == str;
    } catch (err) {
        return false;
    }
}

or

const notBase64 = /[^A-Z0-9+\/=]/i;

export default function isBase64(str) {
  assertString(str); // remove this line and make sure you pass in a string
  const len = str.length;
  if (!len || len % 4 !== 0 || notBase64.test(str)) {
    return false;
  }
  const firstPaddingChar = str.indexOf('=');
  return firstPaddingChar === -1 ||
    firstPaddingChar === len - 1 ||
    (firstPaddingChar === len - 2 && str[len - 1] === '=');
}

试试看呢

首先表示抱歉,没有遇到过这个问题。
但如果要上传未知类型的数据的话可以,直接设置请求头类型为Content-Type:multipart/form-data
数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type:来表名文件类型content-disposition:用来说明字段的一些信息

由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
然后在由后台做处理(后台是可以拿到他的类型(字符串/其他文件))

clipboard.png

例如:
你需要上传图片,但上传的图片可能是.jpg 也可以是 字符串 base64格式,只需要请求头设置为multipart/form-data,异步提交的话将数据保存到 FormData中(表单可以直接获得FormData类型的数据)再提交,再由后台处理即可

base64码开头都是形如data:image/xxx;base64,xxxxxx...的
我觉得如果不用验证特别严格,可以就这样简单处理

let Src = "data:image/xxx;base64,xxxxxx...";
    function isBase64(str){
        if(str.indexOf('data:')!=-1 && str.indexOf('base64')!=-1 ){
            return true;
        }else{
            return false;
        }
    }
    console.log(isBase64(Src));

当然需要严格的话,写个正则也行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题