- 上传工具类
使用 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;
}
}
- 枚举类型
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;
}
}
- 使用 注入依赖
@Resource
private OssUtils ossUtils;
调用方法
String url = ossUtils.uploadBase64(camera.getImageName(), camera.getImage());
- 注意 这个base64字符串是处理过的,如果你的字符串是这样未处理的
String str = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2w....."
需要从 “,” 处截断,取后面的字符串也就是
/9j/4AAQSkZJRgABAQAAAQABAAD/2w....
这个作为 String base64 的参数传递进去。