Base64格式图片文件上传阿里云OSS

背景:
最近在做一个依赖第三方邮件服务商的WebHook功能实现用户向指定邮箱发邮件,我方自动处理的功能,但是第三方返回来的邮件中图片、附件均为Base64的格式,我方需要上传图片和附件到阿里云
也是第一次接触base64格式的东西,一开始并不知道它怎么显示,于是我用了很多图片转base64的工具来对里面的数据,通过这样来看我接受到的邮箱里面的数据到底是哪一部分,我该如何解析,通过半天的分析和测试我实现了base64上传阿里云OSS并返回URL地址。下面说仔细的过程:
base64图片或文件由一下格式组成(解析拼凑之后):
第一部分: data:(有冒号)
第二部分: (Type)如:image/jpeg
第三部分: ;base64, (为了前面有分号,后面一个逗号)
第四部分: (这部分主要是base64的内容了)/9j/4AAQSkZJRgABAQAA…超级长
其实应该这样看我的拼凑

StringBuilder imageBase64 = new StringBuilder();
                imageBase64.append("data:");
                imageBase64.append(imageType);
                imageBase64.append(";base64,");
                imageBase64.append(content);

此时得到的imageBase64就是我们可以直接在web上展示的图片内容如下:(我用Base64格式内容替换Google的logo)
Base64格式图片文件上传阿里云OSS_第1张图片
替换之后:
Base64格式图片文件上传阿里云OSS_第2张图片
显而易见我们得到的base64串“data:img/jpg;base64,/9j/4AAQ…”就相当于一个https的图片url,只不过我们没有从外部请求url显示而是直接用一堆字符展示了。
所以到这里我们上传OSS就容易多了,这一堆base64的内容我们把它拿到直接转成流然后上传OSS我们就可以拿到我们需要的OSS的URL地址了。下面是我找到的一种base64传OSS的代码:

 try {
                byte[] bytes = new BASE64Decoder().decodeBuffer(content);  //将字符串转换为byte数组,这里的content是那一串base64密文 /9j/4AAQ.................,不包含(data:img/jpg;base64,)注意标点符号
                inputStream = new ByteArrayInputStream(bytes);
                ObjectMetadata metadata = new ObjectMetadata();
                metadata.setContentLength(inputStream.available());       
                oss.putObject(GlobalConfig.bucket,GlobalConfig.packagename+"/"+newFileName, inputStream, metadata);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

注意: 每个公司肯定有不同的上传OSS的方法,有的封装了有的没有方法就因人而异了,但是上传的流是一样的

你可能感兴趣的:(Java)