@Component
@Slf4j
public class OssUtil {
@Autowired
private OssConfig ossConfig;
public String upload(MultipartFile file) throws IOException {
InputStream inputStream = file.getInputStream();
try {
String currentTimeFile = new DateTime(System.currentTimeMillis()).toString("yyyy_MM_dd_HH_mm_ss_SSS");
//获取文件后缀
String name2 = FileUtil.getExtensionName(file.getOriginalFilename());
String newFileName = "friends" + "_"
+ currentTimeFile
+ "."
+ FileUtil.getExtensionName(file.getOriginalFilename());
log.info("newFileName:{}", newFileName);
// 上传路径
String ossFullPath = "";
//TODO 路径规则待需求确认之后再修改 ->最优格式lesson/tag/version/course.zip
ossFullPath = new StringBuilder()
.append(Consts.FRIENDS).append(Consts.SEPARATOR).append(currentTimeFile).append(Consts.SPOT).append(name2)
.toString();
log.info("ossFullPath1:{}", ossFullPath);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");
ossConfig.getOssClient().putObject(ossConfig.getBucketName(), ossFullPath, inputStream,objectMetadata);
Date expiration = new Date(System.currentTimeMillis() + ossConfig.getExpiration());
String url = ossConfig.getOssClient().generatePresignedUrl(ossConfig.getBucketName(), ossFullPath, expiration).toString();
log.info("oss上传返回url:{}",url);
return url;
} catch (Exception e) {
log.info("上传异常:{}");
return null;
}finally {
try {
if (null != inputStream){
inputStream.close();
inputStream =null;
}
} catch (IOException e) {
log.info("流关闭异常,忽略!");
}
}
}
/**
* 获取 源站 url
*
* @param key
* @return
*/
public String getUrl(String key) {
Date expiration = new Date(System.currentTimeMillis() + ossConfig.getExpiration());
return ossConfig.getOssClient().generatePresignedUrl(ossConfig.getBucketName(), key, expiration).toString();
}
/**
* 获取etag
*
* @param key
* @return
*/
public String getEtag(String key) {
SimplifiedObjectMeta objectMeta = ossConfig.getOssClient().getSimplifiedObjectMeta(ossConfig.getBucketName(), key);
String etag = objectMeta.getETag();
return etag;
}
/**
* 检验key是否存在
*
* @param key
* @return
*/
public boolean isExist(String key) {
boolean isExist = ossConfig.getOssClient().doesObjectExist(ossConfig.getBucketName(), key);
return isExist;
}
}
@Slf4j
@Data
@Component
@ConfigurationProperties(prefix="oss")
public class OssConfig {
//阿里云key
private String accessKeyId;
//阿里云secret
private String accessKeySecret;
@Value("bucketName")
private String bucketName;
private String endpoint;
private OSSClient ossClient;
private long expiration;
@PostConstruct
public void init() {
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
}