Merge remote-tracking branch 'refs/remotes/origin/dev'
This commit is contained in:
@@ -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(), "不能为空");
|
||||
|
@@ -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();
|
||||
|
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user