文档入口
上传
业务代码
public class OssUtils {
// Endpoint以杭州为例,其它Region请按实际情况填写。
public static String ENDPOINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
public static String OUN_NET_ENDPOINT;
public static String ENDPOINTANDBUCKET;
static {
ENDPOINT = NacosConfigUtil.getConfig(MchApiNConfigConstant.OSS_ENDPOINT);
ACCESS_KEY_ID = NacosConfigUtil.getConfig(MchApiNConfigConstant.OSS_ACCESS_KEY_ID);
ACCESS_KEY_SECRET = NacosConfigUtil.getConfig(MchApiNConfigConstant.OSS_ACCESS_KEY_SECRET);
BUCKET_NAME = NacosConfigUtil.getConfig(MchApiNConfigConstant.OSS_BUCKET_NAME);
OUN_NET_ENDPOINT = NacosConfigUtil.getConfig(MchApiNConfigConstant.OSS_OUTNETENDPOINT);
ENDPOINTANDBUCKET = NacosConfigUtil.getConfig(MchApiNConfigConstant.OSS_ENDPOINTANDBUCKET);
}
public static String uploadOSSPirvate(InputStream instream, String fileName, Date expiration ,String fileDir) {
// 获取文件后缀
String prefix = fileName.substring(fileName.lastIndexOf(".")+1);
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
String ret = "";
try {
//创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(instream.available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
//设置文件上传类型
objectMetadata.setContentType(getContentType(prefix));
objectMetadata.setContentDisposition("inline;filename=" + fileName);
// 设置acl为私有读写
objectMetadata.setObjectAcl(CannedAccessControlList.Private);
//上传文件
String key = fileDir+fileName;
PutObjectResult putResult = ossClient.putObject(BUCKET_NAME, key, instream, objectMetadata);
ret = putResult.getETag();
// 生成URL expiration设置失效时间 1天
//Date expiration = new Date(System.currentTimeMillis()+3600L*1000*24);
URL url = ossClient.generatePresignedUrl(BUCKET_NAME, key, expiration);
if (url != null) {
ret = url.toString();
//不对url后面的参数进行截取。否则链接后面的参数不生效。
// 如:设置了链接失效时间 Expires=1649905689 访问链接时,第三方会根据Expires值来判断链接失效情况。
//ret = ret.substring(0, ret.indexOf("?"));
ret = ret.replaceAll(ENDPOINTANDBUCKET, OUN_NET_ENDPOINT);
}
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
try {
if (instream != null) {
instream.close();
}
} catch (IOException e) {
log.error("异常", e);
}
ossClient.shutdown();
}
return ret;
}
}
链接失效问题:
1、Bucket目前有三种访问权限:public-read-write,public-read和private
设置为private,访问的链接需要携带OSSAccessKeyId、Signature等属性才能访问(ossClient.generatePresignedUrl方法返回的完整地址),并且在有效期(expiration)内才有效。
设置为非private,访问链接时,会参考expiration属性,如果没有携带expiration属性,默认链接可永久访问,如果带了expiration属性,会根据expiration属性值进行判断,在有限期内才可访问。
有问题可以在评论下方留言。。。既然来了,不妨点个关注,点个赞吧!!!