将前段传递base64图片上传阿里云并存储地址

可能会有公告或者新闻的需求,而前段又没有直传阿里云,这个时候就需要替换内容中的base64 上传阿里云然后存储地址了


    /**
     * 将base64 上传 并替换
     * @param html
     * @return
     */
    private String uploadBaseReplace(String html) {
        if (StrUtil.isNotEmpty(html)) {
            Set<String> imgStr = getImgStr(html);
            for (String src : imgStr) {
                if (src.contains("base64")){
                    try {
                        String imagePath = upload(src, "", snowflake.nextIdStr(), 0);
                        html.replace(src,Base64OSS.getUrl("", imagePath).toString());
                    } catch (Exception e) {
                        log.error("上传 阿里云失败,错误",e.getMessage());
                    }
                }
            }
        }
        return html;
    }


    public static String upload(String fileString, String dir, String fileName, int useType) throws Exception {

        OSS ossClient = buildOssClient();

        String suffix = "";
        String prefix = "";
        String key = "";
        byte[] bytes = new byte[]{};

        if (useType == 0) //       0- 为image内容
        {
            suffix = fileString.substring(11, fileString.indexOf(";"));
            prefix = fileString.substring(0, fileString.indexOf(",") + 1);
            fileString = fileString.replace(prefix, "");
            bytes = Base64.getMimeDecoder().decode(fileString);  //将字符串转换为byte数组,这里的content是那一串base64密文 /9j/4AAQ.................,不包含(data:img/jpg;base64,)注意标点符号
        }
        else if (useType == 1) //  1- 为 html 内容
        {
            suffix = "";
            bytes = fileString.getBytes("utf-8");  //将字符串转换为byte数组,这里的content是那一串base64密文 /9j/4AAQ.................,不包含(data:img/jpg;base64,)注意标点符号
        }

        ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentLength(inputStream.available());
        metadata.setCacheControl("no-cache");
        // 指定该Object下设置Header
        metadata.setHeader("Pragma", "no-cache");
        // 指定该Object被下载时的内容编码格式
        metadata.setContentEncoding("utf-8");

        if (Strings.isNullOrEmpty(dir)) {
            dir = fileDir;
        }

        key = getFilename(dir, fileName, suffix);
        ossClient.putObject(bucketName, key, inputStream,metadata);
        URL url = getUrl(ossClient, key);
        System.out.print(url);
        ossClient.shutdown();
        if (useType == 1){
            //1- 为 html 内容
            return url.toString();
        }
        return key;
    }

    /**
     * 得到网页中图片的地址
     * @param htmlStr html字符串
     */
    public static Set<String> getImgStr(String htmlStr) {
        Set<String> pics = new HashSet<String>();
        String img = "";
        Pattern p_image;
        Matcher m_image;
        String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
        p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
        m_image = p_image.matcher(htmlStr);
        while (m_image.find()) {
            // 得到<img />数据
            img = m_image.group();
            // 匹配<img>中的src数据
            Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
            while (m.find()) {
                pics.add(m.group(1));
            }
        }
        return pics;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值