java用oss上传base64图片

作者: 唯有努力不欺人丶 | 来源:发表于2019-07-03 10:03 被阅读2次

好吧,因为最近在研究使用oss。本以为只要做个sts授权就ok了,不过boss又下新命令。身份证照片,人脸识别等要前端传给后端base64码,然后后端再上传。据说是为了安全。

首先不要问我前端传和后端传的区别在哪里。学识浅薄的我解答不了这个问题。只能说是boss交代的。其次为啥不直接穿而是要base64来回来去转。我也回答不了你~~非要说的话,为了安全?我布吉岛。

然后因为比较简单,所以直接上代码吧。

说明一下,因为我们这个参数决定路径。所以前面的判断都是为了确定路径。干代码是下面的几行。

public ResultBean uploadImg(String msgId,String userId,String imgLB,String sname,String img) {

try {

String name = null;

if(msgId==null && "".equals(msgId)) {

if(imgLB==null && "".equals(imgLB)) {

name = "fac/"+ userId +".jpg";

}else {

name = "a/"+ userId +"/"+ imgLB + userId +".jpg";

}

}else {

name = "sign/"+ msgId+ "/"+ sname;

}

//因为有的base64生成的时候前面会有前缀。这里是为了去掉,不然传上去变不成图片

img = img.split(",")[1];

//将生成的base64码反编译回二进制字节码

BASE64Decoder decoder = new BASE64Decoder();

byte[] file = decoder.decodeBuffer(img);

ObjectMetadata objectMeta = new ObjectMetadata();

objectMeta.setContentLength(file.length);

//将字节码转换成流

InputStream input = new ByteArrayInputStream(file);

OSSClient ossClient = new OSSClient(endpoint_upload, accessKeyId_upload, accessKeySecret_upload);

ossClient.putObject(bucketName_upload, name, input,objectMeta);

ossClient.shutdown();

return Tools.result(200, "上传照片成功", null, true);

} catch (Exception e) {

LOG.info("Error Message: " + e.getMessage());

return Tools.result(500, "上传照片失败", null, false);

}

}

然后这里的坑有两点:

1,就是前端传过来的base64码。是带有前缀的。一开始我傻了吧唧的获取后直接转成byte[]

但是在控制台查看怎么也不是图片。然后百度原因居然还有一种说法是base64就是解析不成图片!我差点就信了~~~哎,最后的最后偶然从一个帖子上看到前缀问题~~试了一下果断ok了。所以说大哥大姐们~~发言的时候能不能稍微负点责~~哎~~

2,其实不算坑,可能是我自己太傻了~~就是账号授权问题。第一次用的是sts授权key和密钥~~然后demo总不成功~~其实这个问题我在上个oss的使用上也提到了!但是还是忍不住再提一遍!说真的,oss的账号权限问题我觉得我能记一辈子~~~印象太深刻~~

剩下的都是小问题,比如说这个路径要文件夹开始而不能是“/”开头

还有base64反编译的时候BASE64Decoder decoder 这个类可能你引入不进来或者出警告线。处理办法:

右键项目——>properties——>Java Build Path——>Libraries——>JRE——>edit——>然后点最下面的Workspace default JRE(JDK). 然后完成执行。就ok了~

相关文章

网友评论

    本文标题:java用oss上传base64图片

    本文链接:https://www.haomeiwen.com/subject/iagthctx.html