package com.zy.sc.common.service;
|
|
import com.aliyun.oss.OSSClient;
|
import com.aliyun.oss.model.OSSObject;
|
import com.aliyun.oss.model.ObjectMetadata;
|
import com.core.common.SnowflakeIdWorker;
|
import com.core.exception.CoolException;
|
import lombok.Data;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import java.io.InputStream;
|
import java.net.URL;
|
import java.security.SecureRandom;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.Objects;
|
|
/**
|
* 阿里云OSS服务类
|
* Created by vincent on 2019-11-26
|
*/
|
@Data
|
@Service("ossService")
|
public class OssService {
|
|
private static Logger log = LoggerFactory.getLogger(OssService.class);
|
|
private static final String OSS_ENDPOINT = "http://oss-cn-hangzhou.aliyuncs.com";
|
|
@Value("${aliyun.oss.id}")
|
private String accessKeyId;
|
|
@Value("${aliyun.oss.secret}")
|
private String accessKeySecret;
|
|
@Value("${aliyun.oss.bucket}")
|
private String bucket;
|
|
@Value("${aliyun.oss.endpoint}")
|
private String endpoint;
|
|
@Value("${aliyun.oss.prefix}")
|
private String prefix;
|
|
@Autowired
|
private SnowflakeIdWorker snowflakeIdWorker;
|
|
/**
|
* 上传OSS文件
|
* @return the url
|
*/
|
public String upload(InputStream inputStream, String fileName){
|
OSSClient ossClient = new OSSClient(OSS_ENDPOINT, accessKeyId, accessKeySecret);
|
try {
|
if (!ossClient.doesBucketExist(bucket)) {
|
ossClient.createBucket(bucket);
|
log.info("您的Bucket不存在,创建Bucket:{}",bucket);
|
}
|
String suffix = Objects.requireNonNull(fileName).substring(fileName.lastIndexOf(".") + 1);
|
String name = String.valueOf(snowflakeIdWorker.nextId()).concat(".").concat(suffix);
|
ObjectMetadata objectMetadata = new ObjectMetadata();
|
ossClient.putObject(bucket, name, inputStream, objectMetadata);
|
Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 100);
|
URL url = ossClient.generatePresignedUrl(bucket, name, expiration);
|
log.info("OSS文件上传成功: {}", name);
|
// return String.valueOf(url);
|
return prefix+name;
|
} catch (Exception e){
|
e.printStackTrace();
|
} finally {
|
ossClient.shutdown();
|
}
|
throw new CoolException("500-上传失败");
|
}
|
|
/**
|
* 下载OSS文件
|
*/
|
public void download(String name) {
|
OSSClient ossClient = new OSSClient(OSS_ENDPOINT, accessKeyId, accessKeySecret);
|
try {
|
OSSObject ossObject = ossClient.getObject(bucket, name);
|
InputStream inputStream = ossObject.getObjectContent();
|
// do transfer
|
inputStream.close();
|
log.info("OSS文件下载成功: {}", name);
|
} catch (Exception e){
|
e.printStackTrace();
|
} finally {
|
ossClient.shutdown();
|
}
|
}
|
|
/**
|
* 删除OSS文件
|
*/
|
public boolean delete(String name) {
|
OSSClient ossClient = new OSSClient(OSS_ENDPOINT, accessKeyId, accessKeySecret);
|
try {
|
ossClient.deleteObject(bucket, name);
|
} catch (Exception e){
|
e.printStackTrace();
|
return false;
|
} finally {
|
ossClient.shutdown();
|
}
|
return true;
|
}
|
|
public String uploadFile(InputStream inputStream, String fileName, Long len, String suffix){
|
OSSClient ossClient = new OSSClient(OSS_ENDPOINT, accessKeyId, accessKeySecret);
|
try {
|
if (!ossClient.doesBucketExist(bucket)) {
|
ossClient.createBucket(bucket);
|
log.info("您的Bucket不存在,创建Bucket:{}", bucket);
|
}
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
// 生成上传文件名
|
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + "." + suffix;
|
String objectName = sdf.format(new Date()) + "/" + finalFileName;
|
|
// 添加 ContentType
|
ObjectMetadata objectMetadata = new ObjectMetadata();
|
objectMetadata.setContentLength(len);
|
ossClient.putObject(bucket, objectName, inputStream, objectMetadata);
|
|
// 设置URL过期时间为100年。
|
Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 100);
|
|
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
|
URL url = ossClient.generatePresignedUrl(bucket, objectName, expiration);
|
|
log.info("OSS文件上传成功: {}", fileName);
|
// return String.valueOf(url);
|
return prefix + objectName;
|
} catch (Exception e){
|
e.printStackTrace();
|
} finally {
|
ossClient.shutdown();
|
}
|
throw new CoolException("500-上传失败");
|
}
|
|
}
|