Java OSS 上传 Base64 格式图片

1,442 阅读1分钟
  1. 上传工具类 使用 fuction 传参方式,能够确保后期新加入的别的方法(例如:上传、下载等),可以自动关闭,无需手动写建立 ossClient 的实例,自动生成。
@Slf4j
@Component
public class OssUtils {

    @Value("${oss_endpoint}")
    private String endpoint;

    @Value("${accessKeyId}")
    private String accessKeyId;

    @Value("${accessKeySecret}")
    private String accessKeySecret;

    @Value("${bucketName}")
    private String bucketName;

    private <T> T execute(Function<OSS, T> function) {
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        log.info("-------------阿里云 执行开始-------------");
        T t;
        try {
            t = function.apply(ossClient);
        } catch (Exception e) {
            log.info("Exception e : ", e);
            log.info("-------------阿里云 执行中止-------------");
            throw e;
        }
        ossClient.shutdown();
        log.info("Result      : {}", t);
        log.info("-------------阿里云 执行完成-------------");

        return t;
    }

    /**
     * 上传图片 base64 格式
     * @return url
     */
    public String uploadBase64(String name, String base64) {
        return this.execute(ossClient -> {
            byte[] decode = Base64.getDecoder().decode(base64);
            ossClient.putObject(bucketName, OssEnum.IMG_PATH.getName() + "/" + name, new ByteArrayInputStream(decode));
            return getImgUrl(name);
        });
    }

    private String getImgUrl(String name) {
        return OssEnum.TRANSFER_PROTOCOL.getName() + bucketName + "." + endpoint + "/" + OssEnum.IMG_PATH.getName() + "/" + name;
    }

}
  1. 枚举类型
public enum OssEnum {
    /**
     * OSS 枚举类型
     */
    IMG_PATH("photo"),
    TRANSFER_PROTOCOL("https://"),
    ;

    private final String name;

    OssEnum(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
  1. 使用 注入依赖
@Resource
private OssUtils ossUtils;

调用方法

String url = ossUtils.uploadBase64(camera.getImageName(), camera.getImage());
  1. 注意 这个base64字符串是处理过的,如果你的字符串是这样未处理的

String str = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2w....."

需要从 “,” 处截断,取后面的字符串也就是

/9j/4AAQSkZJRgABAQAAAQABAAD/2w....

这个作为 String base64 的参数传递进去。