1. 创建Bucket
- 填写属性参数
2. 获取秘钥accessKey
2.1 进入accessKey管理页面
2.2 创建accessKey,并获取信息
-
需要自行进行安全验证
-
记录自己的 信息
3. 查看官方SDK文档
-
位置
-
找到开发参考Java
4. 具体实现-参考官网
4.1 添加依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加JAXB相关依赖。添加JAXB相关依赖示例代码如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
4.2 配置文件添加权限秘钥
注:下面的配置记得替换为自己的
properties:
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-hangzhou.aliyuncs.com
aliyun.oss.file.keyid=LTAI5tPDostiVZjxq7LL4TDGfaf
aliyun.oss.file.keysecret=eKA03dmSMvizkec4Ij5ksNPWfafaSqDi7P
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=oss-test
yaml:
aliyun:
oss:
file:
endpoint: oss-cn-hangzhou.aliyuncs.com
keyid: LTAI5tPDostiVZjxq7LL4TDGfaf
keysecret: eKA03dmSMvizkec4Ij5ksNPWfafaSqDi7P
bucketname: oss-demo
4.3 添加常量类读取配置
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
//@ConfigurationProperties(prefix = "aliyun.oss.file")
public class ConstantPropertiesUtil implements InitializingBean {
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
// @Value("${aliyun.oss.file.filehost}")
// private String fileHost;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
// public static String FILE_HOST ;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
// FILE_HOST = fileHost;
}
}
4.4 编写上传文件服务
- 也可以封装为工具类方法
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.rjx.oss.service.OssService;
import com.rjx.oss.utils.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.UUID;
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(String type,MultipartFile file) {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = ConstantPropertiesUtil.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
// 填写Bucket名称,例如examplebucket。
String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
InputStream inputStream = file.getInputStream();
//获取文件名称
String filename = file.getOriginalFilename();
//随机生成唯一的值,防止文件覆盖
String uuid = UUID.randomUUID().toString().replaceAll("-","");
filename = uuid + filename;
//获取当前时间
String datePath = new DateTime().toString("yyyy/MM/dd");
//拼接,按日期文件夹进行分类
filename = type + "/" datePath + "/" + filename;
// 创建PutObject请求。
ossClient.putObject(bucketName, filename, inputStream);
//把上传的文件路径进行返回
//https://oss-test.oss-cn-hangzhou.aliyuncs.com/1.jpg
String url = "https://"+ bucketName + "." + endpoint + "/" + filename;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}