You've already forked FrameTour-BE
彻底铲除OSSUtil,抽象、修改
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package com.ycwl.basic.storage.adapters;
|
||||
|
||||
import com.ycwl.basic.storage.entity.StorageConfig;
|
||||
import com.ycwl.basic.storage.exceptions.UploadFileFailedException;
|
||||
import lombok.Setter;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
|
||||
public abstract class AStorageAdapter implements IStorageAdapter {
|
||||
|
||||
@Override
|
||||
public String uploadFile(File file, String path, String filename) {
|
||||
if (file == null) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
InputStream inputStream = new FileInputStream(file);
|
||||
return uploadFile(inputStream, path, filename);
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new UploadFileFailedException("文件不存在");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String uploadFile(MultipartFile file, String path, String filename) {
|
||||
if (file == null) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
InputStream inputStream = file.getInputStream();
|
||||
return uploadFile(inputStream, path, filename);
|
||||
} catch (Exception e) {
|
||||
throw new UploadFileFailedException("文件上传失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlForUpload(String path, String filename) {
|
||||
return getUrlForUpload(path, filename, new Date(System.currentTimeMillis() + 1000 * 60 * 60));
|
||||
}
|
||||
}
|
102
src/main/java/com/ycwl/basic/storage/adapters/AliOssAdapter.java
Normal file
102
src/main/java/com/ycwl/basic/storage/adapters/AliOssAdapter.java
Normal file
@@ -0,0 +1,102 @@
|
||||
package com.ycwl.basic.storage.adapters;
|
||||
|
||||
|
||||
import com.aliyun.oss.ClientException;
|
||||
import com.aliyun.oss.HttpMethod;
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.PutObjectRequest;
|
||||
import com.ycwl.basic.storage.entity.AliOssStorageConfig;
|
||||
import com.ycwl.basic.storage.entity.StorageConfig;
|
||||
import com.ycwl.basic.storage.exceptions.StorageConfigException;
|
||||
import com.ycwl.basic.storage.exceptions.UploadFileFailedException;
|
||||
import com.ycwl.basic.storage.utils.StorageUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
public class AliOssAdapter extends AStorageAdapter {
|
||||
private AliOssStorageConfig config;
|
||||
|
||||
@Override
|
||||
public void loadConfig(Map<String, String> _config) {
|
||||
AliOssStorageConfig config = new AliOssStorageConfig();
|
||||
config.setAccessKeyId(_config.get("accessKeyId"));
|
||||
config.setAccessKeySecret(_config.get("accessKeySecret"));
|
||||
config.setBucketName(_config.get("bucketName"));
|
||||
config.setEndpoint(_config.get("endpoint"));
|
||||
config.setRegion(_config.get("region"));
|
||||
config.setUrl(_config.get("url"));
|
||||
config.setPrefix(_config.get("prefix"));
|
||||
config.checkEverythingOK();
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfig(StorageConfig config) {
|
||||
if (config == null) {
|
||||
throw new StorageConfigException("配置为空");
|
||||
}
|
||||
if (config instanceof AliOssStorageConfig) {
|
||||
this.config = (AliOssStorageConfig) config;
|
||||
} else {
|
||||
throw new StorageConfigException("配置类型错误,传入的类为:" + config.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String uploadFile(InputStream inputStream, String path, String filename) {
|
||||
if (inputStream == null) {
|
||||
return null;
|
||||
}
|
||||
String fullPath = buildPath(path, filename);
|
||||
OSS ossClient = getOssClient();
|
||||
try {
|
||||
PutObjectRequest putObjectRequest = new PutObjectRequest(config.getBucketName(), fullPath, inputStream);
|
||||
ossClient.putObject(putObjectRequest);
|
||||
return getUrl(path, filename);
|
||||
} catch (ClientException e) {
|
||||
throw new UploadFileFailedException("上传文件失败:" + e.getErrorMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean deleteFile(String path, String filename) {
|
||||
OSS ossClient = getOssClient();
|
||||
try {
|
||||
ossClient.deleteObject(config.getBucketName(), buildPath(path, filename));
|
||||
return true;
|
||||
} catch (ClientException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String path, String filename) {
|
||||
return config.getUrl() + buildPath(path, filename);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlForUpload(String path, String filename, Date expireDate) {
|
||||
OSS ossClient = getOssClient();
|
||||
URL url = ossClient.generatePresignedUrl(config.getBucketName(), buildPath(path, filename), expireDate, HttpMethod.PUT);
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
private OSS getOssClient() {
|
||||
OSS ossClient = new OSSClientBuilder().build(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
|
||||
return ossClient;
|
||||
}
|
||||
|
||||
private String buildPath(String ...paths) {
|
||||
if (StringUtils.isNotBlank(config.getPrefix())) {
|
||||
return StorageUtil.joinPath(config.getPrefix(), paths);
|
||||
} else {
|
||||
return StorageUtil.joinPath(paths);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package com.ycwl.basic.storage.adapters;
|
||||
|
||||
import com.ycwl.basic.storage.entity.StorageConfig;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IStorageAdapter {
|
||||
void loadConfig(Map<String, String> config);
|
||||
void setConfig(StorageConfig config);
|
||||
String uploadFile(InputStream inputStream, String path, String filename);
|
||||
String uploadFile(File file, String path, String filename);
|
||||
String uploadFile(MultipartFile file, String path, String filename);
|
||||
boolean deleteFile(String path, String filename);
|
||||
String getUrl(String path, String filename);
|
||||
String getUrlForUpload(String path, String filename);
|
||||
String getUrlForUpload(String path, String filename, Date expireDate);
|
||||
}
|
@@ -0,0 +1,39 @@
|
||||
package com.ycwl.basic.storage.adapters;
|
||||
|
||||
import com.ycwl.basic.storage.entity.StorageConfig;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
public class LocalStorageAdapter extends AStorageAdapter{
|
||||
@Override
|
||||
public void loadConfig(Map<String, String> config) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfig(StorageConfig config) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String uploadFile(InputStream inputStream, String path, String filename) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteFile(String path, String filename) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String path, String filename) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlForUpload(String path, String filename, Date expireDate) {
|
||||
return "";
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user