feat: ali创建查找删除bucket,上传下载删除重命名文件

This commit is contained in:
sjm
2024-07-01 08:55:39 +08:00
parent 9da0044cc6
commit 36db677ad9
5 changed files with 232 additions and 44 deletions

View File

@@ -1,18 +1,33 @@
package com.schisandra.oss.application.controller;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.amazonaws.util.IOUtils;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssAliDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssAliDTO;
import com.schisandra.oss.application.oss.core.ali.AliOssClient;
import com.schisandra.oss.application.oss.core.ali.AliOssConfiguration;
import com.schisandra.oss.application.oss.core.minio.MinioOssClient;
import com.schisandra.oss.application.oss.model.OssInfo;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssAliBO;
import com.schisandra.oss.domain.service.SchisandraOssAliDomainService;
import io.minio.errors.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* controller
@@ -29,6 +44,8 @@ public class SchisandraOssAliController {
private SchisandraOssAliDomainService schisandraOssAliDomainService;
@Resource
private AliOssConfiguration aliOssConfiguration;
@Autowired
private AliOssClient aliOssClient;
@GetMapping("init")
public void init(@RequestParam String userId){
@@ -106,6 +123,141 @@ public class SchisandraOssAliController {
}
/**
* 查找bucket
* @param userId
* @return
* @throws ServerException
* @throws InsufficientDataException
* @throws ErrorResponseException
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
* @throws InvalidResponseException
* @throws XmlParserException
* @throws InternalException
*/
@PostMapping("seleteBucket")
public Result<String> seleteBucket(@RequestParam String userId) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
Preconditions.checkNotNull(userId, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
return Result.ok(bean.selectAllBucket());
}
/**
* @description: 创建bucket
* @param: [userId, bucket]
* @return: com.schisandra.oss.common.entity.Result<java.lang.String>
* @author sjm
* @date: 2024/6/26 17:38
*/
@PostMapping("createBucket")
public Result<String> createBucket(@RequestParam String userId, @RequestParam String bucket) {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
return Result.ok(bean.createBucket(bucket));
}
/**
* 删除bucket
* @param userId
* @param bucket
* @return
*/
@PostMapping("deleteBucket")
public Result<String> deleteBucket(@RequestParam String userId, @RequestParam String bucket) {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
return Result.ok(bean.deleteBucket(bucket));
}
/**
* @description: 上传文件
* @param: [schisandraOssAliDTO]
* @return: void
* @date: 2024/6/26 14:34
*/
@PostMapping("uploadMinioFile")
public Result<OssInfo> uploadMinioFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName, @RequestParam String bucket) throws IOException {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(fileName, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
// 获取文件输入流
InputStream is = file.getInputStream();
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
return Result.ok(bean.upLoad(is, fileName, true));
}
/**
* @description: 下载文件
* @param: [schisandraOssMinioDTO]
* @return: voiD
* @date: 2024/6/26 13:56
*/
@GetMapping("downloadAliFile")
public void getAliFile(@RequestParam String bucket, @RequestParam String userId, @RequestParam String filePath, HttpServletResponse response) throws Exception {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(filePath, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
ServletOutputStream output = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filePath.substring(filePath.lastIndexOf("/") + 1), "UTF-8"));
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
bean.downLoad(output,filePath);
}
/**
* @description: 删除文件
* @param: [schisandraOssAliDTO]
* @return: void
* @date: 2024/6/26 14:34
*/
@PostMapping("deleteAliFile")
public Result deleteMinioFile(@RequestParam String bucket, @RequestParam String userId, @RequestParam String filePath) {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(filePath, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
bean.delete(filePath);
return Result.ok();
}
/**
* @description: 重命名文件
* @param: [userId, bucket, oldFileName, newFileName]
* @return: com.schisandra.oss.common.entity.Result
* @date: 2024/6/27 9:41
*/
@PostMapping("renameAliFile")
public Result renameMinioFile(@RequestParam String userId, @RequestParam String bucket, @RequestParam String oldFileName, @RequestParam String newFileName) throws IOException {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(oldFileName, "不能为空");
Preconditions.checkNotNull(newFileName, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
try {
bean.rename(oldFileName, newFileName);
}catch (Exception e){
return Result.fail(e.getMessage());
}
return Result.ok();
}
private void parameterCheck(SchisandraOssAliDTO schisandraOssAliDTO) {
Preconditions.checkNotNull(schisandraOssAliDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserId(), "不能为空");

View File

@@ -52,6 +52,45 @@ public class AliOssClient implements StandardOssClient {
private OSS oss;
private AliOssConfig aliOssConfig;
public List<String> selectAllBucket() {
List<Bucket> buckets = oss.listBuckets();
List<String> names = new ArrayList<>();
buckets.forEach(bucket -> {
names.add(bucket.getName());
});
return names;
}
public String createBucket(String bucketName) {
try {
if (!oss.doesBucketExist(bucketName)) {
Bucket bucket = oss.createBucket(bucketName);
bucket.setRegion("chengdu");
}else {
return "bucket already exists";
}
} catch (Exception e) {
e.printStackTrace();
}
return bucketName;
}
public String deleteBucket(String bucketName) {
try{
if (oss.doesBucketExist(bucketName)){
VoidResult voidResult = oss.deleteBucket(bucketName);
}
else{
return "bucket does not exist";
}
}catch(Exception e){
e.printStackTrace();
}
return "yes";
}
@Override
public OssInfo upLoad(InputStream is, String targetName, Boolean isOverride) {
String bucketName = getBucketName();

View File

@@ -1,6 +1,7 @@
package com.schisandra.oss.application.oss.core.ali;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.comm.Protocol;
@@ -46,57 +47,46 @@ public class AliOssConfiguration {
aliOssConfig.setEndpoint(ali.getEndpoint());
aliOssConfig.setAccessKeyId(ali.getAccessKeyId());
aliOssConfig.setAccessKeySecret(ali.getAccessKeySecret());
aliOssConfig.setSecurityToken(ali.getSecurityToken());
if (Boolean.parseBoolean(ali.getOpenAdvancedSetup())) {
AliOssClientConfig aliOssClientConfig = new AliOssClientConfig();
aliOssClientConfig.setCnameExcludeList(Arrays.asList(Optional.ofNullable(ali.getCnameExcludeList()).orElse("").split(",")));
aliOssClientConfig.setConnectionTimeout(ali.getConnectionTimeout());
aliOssClientConfig.setConnectionTTL(ali.getConnectionTTL());
aliOssClientConfig.setProtocol(Protocol.valueOf(ali.getProtocol()));
aliOssClientConfig.setConnectionRequestTimeout(ali.getConnectionRequestTimeout());
aliOssClientConfig.setMaxConnections(ali.getMaxConnections());
aliOssClientConfig.setProxyPort(Integer.parseInt(ali.getProxyPort()));
aliOssClientConfig.setProxyDomain(ali.getProxyDomain());
aliOssClientConfig.setCrcCheckEnabled(Boolean.parseBoolean(ali.getCrcCheckEnabled()));
aliOssClientConfig.setTickOffset(ali.getTickOffset());
aliOssClientConfig.setProxyHost(ali.getProxyHost());
aliOssClientConfig.setProxyPassword(ali.getProxyPassword());
aliOssClientConfig.setProxyUsername(ali.getProxyUsername());
aliOssClientConfig.setVerifySSLEnable(Boolean.parseBoolean(ali.getVerifySSLEnable()));
aliOssClientConfig.setUseSystemPropertyValues(Boolean.parseBoolean(ali.getUseSystemPropertyValues()));
aliOssClientConfig.setUseReaper(Boolean.parseBoolean(ali.getUseReaper()));
aliOssClientConfig.setSupportCname(Boolean.parseBoolean(ali.getSupportCname()));
aliOssClientConfig.setSocketTimeout(ali.getSocketTimeout());
aliOssClientConfig.setSldEnabled(Boolean.parseBoolean(ali.getSldEnabled()));
aliOssClientConfig.setProxyWorkstation(ali.getProxyWorkstation());
aliOssClientConfig.setIdleConnectionTime(ali.getIdleConnectionTime());
aliOssClientConfig.setLogConnectionPoolStats(Boolean.parseBoolean(ali.getLogConnectionPoolStats()));
aliOssConfig.setClientConfig(aliOssClientConfig);
}
aliOssConfig.setBasePath(ali.getBasePath());
// if (Boolean.parseBoolean(ali.getOpenAdvancedSetup())) {
// AliOssClientConfig aliOssClientConfig = new AliOssClientConfig();
// aliOssClientConfig.setCnameExcludeList(Arrays.asList(Optional.ofNullable(ali.getCnameExcludeList()).orElse("").split(",")));
// aliOssClientConfig.setConnectionTimeout(ali.getConnectionTimeout());
// aliOssClientConfig.setConnectionTTL(ali.getConnectionTTL());
// aliOssClientConfig.setProtocol(Protocol.valueOf(ali.getProtocol()));
// aliOssClientConfig.setConnectionRequestTimeout(ali.getConnectionRequestTimeout());
// aliOssClientConfig.setMaxConnections(ali.getMaxConnections());
// aliOssClientConfig.setProxyPort(Integer.parseInt(ali.getProxyPort()));
// aliOssClientConfig.setProxyDomain(ali.getProxyDomain());
// aliOssClientConfig.setCrcCheckEnabled(Boolean.parseBoolean(ali.getCrcCheckEnabled()));
// aliOssClientConfig.setTickOffset(ali.getTickOffset());
// aliOssClientConfig.setProxyHost(ali.getProxyHost());
// aliOssClientConfig.setProxyPassword(ali.getProxyPassword());
// aliOssClientConfig.setProxyUsername(ali.getProxyUsername());
// aliOssClientConfig.setVerifySSLEnable(Boolean.parseBoolean(ali.getVerifySSLEnable()));
// aliOssClientConfig.setUseSystemPropertyValues(Boolean.parseBoolean(ali.getUseSystemPropertyValues()));
// aliOssClientConfig.setUseReaper(Boolean.parseBoolean(ali.getUseReaper()));
// aliOssClientConfig.setSupportCname(Boolean.parseBoolean(ali.getSupportCname()));
// aliOssClientConfig.setSocketTimeout(ali.getSocketTimeout());
// aliOssClientConfig.setSldEnabled(Boolean.parseBoolean(ali.getSldEnabled()));
// aliOssClientConfig.setProxyWorkstation(ali.getProxyWorkstation());
// aliOssClientConfig.setIdleConnectionTime(ali.getIdleConnectionTime());
// aliOssClientConfig.setLogConnectionPoolStats(Boolean.parseBoolean(ali.getLogConnectionPoolStats()));
// aliOssConfig.setClientConfig(aliOssClientConfig);
// }
SpringUtil.registerBean(userId, aliOssClient(aliOssConfig));
return aliOssClient(aliOssConfig);
}
public StandardOssClient aliOssClient(AliOssConfig aliOssConfig) {
public AliOssClient aliOssClient(AliOssConfig aliOssConfig) {
return new AliOssClient(ossClient(aliOssConfig), aliOssConfig);
}
public OSS ossClient(AliOssConfig aliOssConfig) {
String securityToken = aliOssConfig.getSecurityToken();
AliOssClientConfig clientConfiguration = aliOssConfig.getClientConfig();
if (ObjectUtil.isEmpty(securityToken) && ObjectUtil.isNotEmpty(clientConfiguration)) {
return new OSSClientBuilder().build(aliOssConfig.getEndpoint(),
aliOssConfig.getAccessKeyId(),
aliOssConfig.getAccessKeySecret(), clientConfiguration.toClientConfig());
}
if (ObjectUtil.isNotEmpty(securityToken) && ObjectUtil.isEmpty(clientConfiguration)) {
return new OSSClientBuilder().build(aliOssConfig.getEndpoint(),
aliOssConfig.getAccessKeyId(),
aliOssConfig.getAccessKeySecret(), securityToken);
}
return new OSSClientBuilder().build(aliOssConfig.getEndpoint(),
aliOssConfig.getAccessKeyId(),
aliOssConfig.getAccessKeySecret(), securityToken,
Optional.ofNullable(clientConfiguration).orElse(new AliOssClientConfig()).toClientConfig());
aliOssConfig.getAccessKeySecret());
}
}

View File

@@ -44,9 +44,15 @@ public class AliOssConfig {
*/
private SliceConfig sliceConfig = new SliceConfig();
public AliOssConfig() {
this.clientConfig = new AliOssClientConfig();
}
public void init() {
this.sliceConfig.init();
basePath = OssPathUtil.valid(basePath);
}
}