前言
对象存储文档完善,内容复杂。这里博主只做简单上传和使用签名URL进行临时授权的操作讲解。
参考:阿里云文档
前置工作
依赖引入
pom.xml 中引入阿里云 OSS 依赖:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
信息配置
application.properties 中添加如下内容:
oss.endpoint=地域节点
oss.access-key-id=你的AccessKeyID
oss.access-key-secret=秘钥
oss.bucket-name=默认的存储桶名称
# 下面这个可以没有,仅作为上传文件存储时的根目录
oss.root-path=blog/
具体实现
Utils
这里我将 OSS 的操作写成了工具类。
基本结构:
/**
* @program: blog_api
* @description: OSS对象存储工具类
* @author: z2devil
* @create: 2021-07-14
**/
@Component
public class OSSUtil {
/**
* 地域节点
*/
@Value("${oss.endpoint}")
private String endpoint;
/**
* 你的AccessKeyID
*/
@Value("${oss.access-key-id}")
private String accessKeyId;
/**
* 秘钥
*/
@Value("${oss.access-key-secret}")
private String accessKeySecret;
/**
* 默认的存储桶名称
*/
@Value("${oss.bucket-name}")
private String bucketName;
/**
* 存放对象
* @param path
* @param stream
*/
public void putObject(String path, InputStream stream) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, path, stream);
ossClient.shutdown();
}
/**
* 获取Url
* @param path
* @return
*/
public String getUrl(String path) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 设置这个文件地址的有效时间(3600秒)
Date expiration = new Date(new Date().getTime() + 3600L * 1000);
String url = ossClient.generatePresignedUrl(bucketName, path, expiration).toString();
ossClient.shutdown();
return url;
}
}
Service实现类
基本结构:
/**
* <p>
* 文件表 服务实现类
* </p>
*
* @author z2devil
* @since 2021-05-19
*/
@Service
@RequiredArgsConstructor
public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements IFileService {
private final OSSUtil ossUtil;
private final FileMapper fileMapper;
/**
* 根目录
*/
@Value("${oss.root-path}")
private String rootPath;
@Override
@SneakyThrows
public void upload(MultipartFile file) {
String fileType = file.getContentType().substring(0, file.getContentType().indexOf("/"));
ossUtil.putObject(rootPath+"指定你的路径", file.getInputStream());
}
@Override
public String getUrl(String path) {
String url = = ossUtil.getUrl(path);
return url;
}
}
接下来就是 Controller 层的编写。