update 优化 oss桶权限为私密时,列表查看时桶为私密的文件获取临时url(解决桶为private上传时无法预览问题)

This commit is contained in:
chenchen 2022-10-20 16:17:38 +08:00
parent 84b701da91
commit c9c4554406
2 changed files with 18 additions and 12 deletions

View File

@ -61,7 +61,7 @@ public class OssClient {
.withClientConfiguration(clientConfig)
.withCredentials(credentialsProvider)
.disableChunkedEncoding();
if (!StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE)){
if (!StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE)) {
// minio 使用https限制使用域名访问 需要此配置 站点填域名
build.enablePathStyleAccess();
}
@ -142,7 +142,7 @@ public class OssClient {
String endpoint = properties.getEndpoint();
String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
// 云服务商直接返回
if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)){
if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)) {
if (StringUtils.isNotBlank(domain)) {
return header + domain;
}
@ -180,6 +180,15 @@ public class OssClient {
return url.toString();
}
/**
* 获取当前桶权限类型
*
* @return 当前桶权限类型code
*/
public String getAccessPolicy() {
return properties.getAccessPolicy();
}
private static String getPolicy(String bucketName, PolicyType policyType) {
StringBuilder builder = new StringBuilder();
builder.append("{\n\"Statement\": [\n{\n\"Action\": [\n");

View File

@ -17,6 +17,7 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.redis.CacheUtils;
import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.core.OssClient;
import com.ruoyi.oss.entity.UploadResult;
@ -97,7 +98,7 @@ public class SysOssServiceImpl implements ISysOssService {
@Override
public void download(Long ossId, HttpServletResponse response) throws IOException {
SysOssVo sysOss = this.matchingUrl(this.getById(ossId));
SysOssVo sysOss = SpringUtils.getAopProxy(this).matchingUrl(this.getById(ossId));
if (ObjectUtil.isNull(sysOss)) {
throw new ServiceException("文件数据不存在!");
}
@ -160,15 +161,11 @@ public class SysOssServiceImpl implements ISysOssService {
* @return oss 匹配Url的OSS对象
*/
private SysOssVo matchingUrl(SysOssVo oss) {
OssProperties properties = JsonUtils.parseObject(
CacheUtils.get(CacheNames.SYS_OSS_CONFIG, oss.getService()).toString(),
OssProperties.class
);
if (properties == null) {
throw new OssException("系统异常, '" + oss.getService() + "'配置信息不存在!");
}
if (StringUtils.equals(AccessPolicyType.PRIVATE.getType(), properties.getAccessPolicy())) {
OssClient storage = OssFactory.instance(oss.getService());
OssClient storage = OssFactory.instance(oss.getService());
/**
* 仅修改桶类型为 private url
*/
if (StringUtils.equals(AccessPolicyType.PRIVATE.getType(), storage.getAccessPolicy())) {
oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 100));
}
return oss;