阿里云对象存储——上传文件
一、配置文件
#OSS连接路径
endpoint = http://oss-cn-beijing.aliyuncs.com
#已经在控制台创建的bucket
bucketName = 20201221
#相应的id和key值,请填写你具体的值,这里不方便展示我自己的。
accessKeyId =
accessKeySecret =
二、配置类
此配置类用户读取.properties系统文件
/**
* 读取配置文件类
*
* @author ChanV
* @create 2020-12-22-9:35
*/
public class SystemConfig {
private static final String CONFIG_PROPERTIES = "oss.properties";
public static String getConfigProperties(String key) throws IOException{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties properties = new Properties();
InputStream in = loader.getResourceAsStream(CONFIG_PROPERTIES);
properties.load(in);
String value = properties.getProperty(key);
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
in.close();
return value;
}
}
此类用于配置OSS
/**
* OSS配置类
*
* @author ChanV
* @create 2020-12-22-9:33
*/
public class OSSConfig {
private String endpoint; //OSS连接路径
private String bucketName; //需要存储的bucketName
private String accessKeyId; //连接KeyId
private String accessKeySecret; //连接密钥
public OSSConfig(){
try {
this.endpoint = SystemConfig.getConfigProperties("endpoint");
this.bucketName = SystemConfig.getConfigProperties("bucketName");
this.accessKeyId = SystemConfig.getConfigProperties("accessKeyId");
this.accessKeySecret = SystemConfig.getConfigProperties("accessKeySecret");
} catch (IOException e) {
e.printStackTrace();
}
}
public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getAccessKeyId() {
return accessKeyId;
}
public void setAccessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
}
public String getAccessKeySecret() {
return accessKeySecret;
}
public void setAccessKeySecret(String accessKeySecret) {
this.accessKeySecret = accessKeySecret;
}
}
三、OSS工具类
@Repository
public class MyOSSUtil {
private static OSSConfig config = null;
//OSS上传文件
public String uploadFile(MultipartFile file){
config = config == null ? new OSSConfig():config;
OSS ossClient = null;
String fileName = file.getOriginalFilename();
String folder = contentType(fileName.substring(fileName.lastIndexOf(".") + 1));
String objectName = folder + UUID.randomUUID() + fileName;
//如果没有下面这两行代码,访问url将不会预览而是直接下载下来
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("image/jpg");
try {
ossClient = new OSSClientBuilder().build(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
ossClient.putObject(config.getBucketName(), objectName, new ByteArrayInputStream(file.getBytes()), metadata);
String[] url = getUrl(objectName).split("\\?");
return url[0];
} catch (IOException e) {
e.printStackTrace();
}
return "error";
}
//获得URL连接
public String getUrl(String objectName){
config = config == null ? new OSSConfig():config;
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
//生成URL
OSS ossClient = new OSSClientBuilder().build(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
URL url = ossClient.generatePresignedUrl(config.getBucketName(), objectName, expiration);
if (url != null){
return url.toString();
}
return null;
}
//根据文件类型分配文件夹
private static String contentType(String fileType){
fileType = fileType.toLowerCase();
String folder = "";
switch (fileType){
case "bmp":
case "gif":
case "png":
case "jpg":
case "jpeg": folder = "images/";
break;
case "html":
case "txt":
case "xml": folder = "text/";
break;
case "map3": folder = "map3/";
break;
case "vsd":
case "ppt":
case "pptx":
case "doc":
case "docx": folder = "application/";
break;
case "mp4": folder = "video/";
break;
}
return folder;
}
}
四、用Swagger测试
成功上传图片并拿到图片的URL
访问成功