springboot,前端图片data:image\jpeg;base64格式请求到后端解码后保存到本地或存储到阿里云OSS

1、前端将通过base64加密后的图片传递到后端,后端接收到显示格式为

 data:[<mediatype>][;base64],<data>

data:协议固定前缀。
[<mediatype>] : 是一个 MIME type,比如 image/jpeg。
[;base64] : 是编码方式。 这里用的 base64。
<data> : 编码后的字符串。

2、java后端解密保存到本地

        //base64编码的字符串
        String base64 = "data:image\jpeg;base64.......";

        //生成随机文件名并拼接上后缀.jpg
        String imgClassPath = UUID.randomUUID().toString().concat(".jpg");
        // 去掉base64前缀 data:image/jpeg;base64,一定一定
        base64 = base64.substring(base64.indexOf(",", 1) + 1);
        BASE64Decoder decoder = new BASE64Decoder();
        //Base64解码
        byte[] imgbytes = decoder.decodeBuffer(base64);
        for (int i = 0; i < imgbytes.length; ++i) {
            //调整异常数据
            if (imgbytes[i] < 0) {
                imgbytes[i] += 256;
            }
        }

        //1、保存为文件流上传到阿里云OSS
        InputStream sbs = new ByteArrayInputStream(imgbytes);
        //上传oss服务器
        String  result = aliOSSUtils.uploadBase64(sbs,imgClassPath);

        System.out.println(result);

        //2、文件保存到本地路径
        //本地保存路径
        //String savePath = "C:\\Users\\99077\\Pictures\\cesih\\";
//        //生成jpeg图片,保存路径拼接上文件名
//        OutputStream out = new FileOutputStream(savePath.concat(imgClassPath));
          //写入到本地
//        out.write(imgbytes);
//        out.flush();
//        out.close();

3、阿里云上传方法aliOSSUtils.uploadBase64代码:

public String uploadBase64(InputStream ico,String nameSuffix) throws IOException {

        //获取阿里云OSS参数
        String endpoint = aliOSSProperties.getEndpoint();
        String accessKeyId = aliOSSProperties.getAccessKeyId();
        String accessKeySecret = aliOSSProperties.getAccessKeySecret();
        String bucketName = aliOSSProperties.getBucketName();

        //外面获取文件输入流,最后方便关闭
        //2 创建OssClient对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        //3 获取文件信息,为了上传
        // meta设置请求头
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentType("image/jpg");
        //4 设置知道文件夹
        ossClient.putObject(bucketName, nameSuffix, ico, meta);
        //5 关闭ossClient
        ossClient.shutdown();
        //6 返回上传之后地址,拼接地址
        String uploadUrl = "https://" + bucketName + "." + endpoint + "/" + nameSuffix;
        ico.close();
        return uploadUrl;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万般皆裂痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值