update 优化 pr240 相关代码 解决桶权限不生效问题

This commit is contained in:
疯狂的狮子li 2022-11-03 11:09:48 +08:00
parent d088b864f0
commit 78376892ae
4 changed files with 33 additions and 45 deletions

View File

@ -25,7 +25,6 @@ import com.ruoyi.oss.properties.OssProperties;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
/** /**
@ -84,9 +83,10 @@ public class OssClient {
return; return;
} }
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName); CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedAcl(AccessPolicyType.PUBLIC.getAcl()); AccessPolicyType accessPolicy = getAccessPolicy();
createBucketRequest.setCannedAcl(accessPolicy.getAcl());
client.createBucket(createBucketRequest); client.createBucket(createBucketRequest);
client.setBucketPolicy(bucketName, getPolicy(bucketName, PolicyType.READ)); client.setBucketPolicy(bucketName, getPolicy(bucketName, accessPolicy.getPolicyType()));
} catch (Exception e) { } catch (Exception e) {
throw new OssException("创建Bucket失败, 请核对配置信息:[" + e.getMessage() + "]"); throw new OssException("创建Bucket失败, 请核对配置信息:[" + e.getMessage() + "]");
} }
@ -103,7 +103,7 @@ public class OssClient {
metadata.setContentLength(inputStream.available()); metadata.setContentLength(inputStream.available());
PutObjectRequest putObjectRequest = new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata); PutObjectRequest putObjectRequest = new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata);
// 设置上传对象的 Acl 为公共读 // 设置上传对象的 Acl 为公共读
putObjectRequest.setCannedAcl(AccessPolicyType.PUBLIC.getAcl()); putObjectRequest.setCannedAcl(getAccessPolicy().getAcl());
client.putObject(putObjectRequest); client.putObject(putObjectRequest);
} catch (Exception e) { } catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]"); throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
@ -176,7 +176,7 @@ public class OssClient {
GeneratePresignedUrlRequest generatePresignedUrlRequest = GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(properties.getBucketName(), objectKey) new GeneratePresignedUrlRequest(properties.getBucketName(), objectKey)
.withMethod(HttpMethod.GET) .withMethod(HttpMethod.GET)
.withExpiration(new Date(System.currentTimeMillis() + 1000 * second)); .withExpiration(new Date(System.currentTimeMillis() + 1000L * second));
URL url = client.generatePresignedUrl(generatePresignedUrlRequest); URL url = client.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString(); return url.toString();
} }
@ -187,9 +187,7 @@ public class OssClient {
* @return 当前桶权限类型code * @return 当前桶权限类型code
*/ */
public AccessPolicyType getAccessPolicy() { public AccessPolicyType getAccessPolicy() {
return Arrays.stream(AccessPolicyType.values()) return AccessPolicyType.getByType(properties.getAccessPolicy());
.filter(n->StringUtils.equals(n.getType(),properties.getAccessPolicy()))
.findFirst().get();
} }
private static String getPolicy(String bucketName, PolicyType policyType) { private static String getPolicy(String bucketName, PolicyType policyType) {

View File

@ -16,17 +16,17 @@ public enum AccessPolicyType {
/** /**
* private * private
*/ */
PRIVATE("0", CannedAccessControlList.Private), PRIVATE("0", CannedAccessControlList.Private, PolicyType.WRITE),
/** /**
* public * public
*/ */
PUBLIC("1", CannedAccessControlList.PublicRead), PUBLIC("1", CannedAccessControlList.PublicRead, PolicyType.READ),
/** /**
* constum * custom
*/ */
CONSTUM("2",CannedAccessControlList.PublicRead); CUSTOM("2",CannedAccessControlList.PublicRead, PolicyType.READ);
/** /**
* 权限类型 * 权限类型
@ -38,4 +38,18 @@ public enum AccessPolicyType {
*/ */
private final CannedAccessControlList acl; private final CannedAccessControlList acl;
/**
* 桶策略类型
*/
private final PolicyType policyType;
public static AccessPolicyType getByType(String type) {
for (AccessPolicyType value : values()) {
if (value.getType().equals(type)) {
return value;
}
}
throw new RuntimeException("'type' not found By " + type);
}
} }

View File

@ -12,20 +12,13 @@ import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.BeanCopyUtils; import com.ruoyi.common.utils.BeanCopyUtils;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.file.FileUtils; 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.common.utils.spring.SpringUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.core.OssClient; import com.ruoyi.oss.core.OssClient;
import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.AccessPolicyType; import com.ruoyi.oss.enumd.AccessPolicyType;
import com.ruoyi.oss.exception.OssException;
import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.oss.properties.OssProperties;
import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.domain.bo.SysOssBo; import com.ruoyi.system.domain.bo.SysOssBo;
import com.ruoyi.system.domain.vo.SysOssVo; import com.ruoyi.system.domain.vo.SysOssVo;
@ -163,11 +156,9 @@ public class SysOssServiceImpl implements ISysOssService {
*/ */
private SysOssVo matchingUrl(SysOssVo oss) { private SysOssVo matchingUrl(SysOssVo oss) {
OssClient storage = OssFactory.instance(oss.getService()); OssClient storage = OssFactory.instance(oss.getService());
/** // 仅修改桶类型为 private 的URL临时URL时长为120s
* 仅修改桶类型为 private 的URL临时URL时长为100s
*/
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 100)); oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 120));
} }
return oss; return oss;
} }

View File

@ -80,7 +80,7 @@
<el-table-column label="桶名称" align="center" prop="bucketName" /> <el-table-column label="桶名称" align="center" prop="bucketName" />
<el-table-column label="前缀" align="center" prop="prefix" /> <el-table-column label="前缀" align="center" prop="prefix" />
<el-table-column label="域" align="center" prop="region" /> <el-table-column label="域" align="center" prop="region" />
<el-table-column label="桶权限类型" align="center" prop="accessPolicy" :formatter = "accessPolicyStateFormat" /> <el-table-column label="桶权限类型" align="center" prop="accessPolicy" :formatter="accessPolicyStateFormat" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
@ -216,21 +216,6 @@ export default {
isHttpsOptions: [], isHttpsOptions: [],
// (0 1) // (0 1)
statusOptions: [], statusOptions: [],
//
accessPolicyOptions: [
{
label: 'private',
value: 0
},
{
label: 'public',
value: 1
},
{
label: 'custom',
value: 2
}
],
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
@ -412,11 +397,11 @@ export default {
}, },
accessPolicyStateFormat(row) { accessPolicyStateFormat(row) {
if (row.accessPolicy === "0") { if (row.accessPolicy === "0") {
return <span class="el-tag el-tag--warning el-tag--medium el-tag--light" > private </span> return <span class="el-tag el-tag--warning el-tag--medium el-tag--light">private</span>
} else if (row.accessPolicy === "1") { } else if (row.accessPolicy === "1") {
return <span class="el-tag el-tag--success el-tag--medium el-tag--light" > public </span> return <span class="el-tag el-tag--success el-tag--medium el-tag--light">public</span>
} else if (row.accessPolicy === "2") { } else if (row.accessPolicy === "2") {
return <span class="el-tag el-tag--medium el-tag--light" > constum </span> return <span class="el-tag el-tag--medium el-tag--light">custom</span>
} }
} }