1、在pom文件中添加依赖
<dependencies>
<!-- 七牛云SDK -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.13.0, 7.13.99]</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
</dependencies>
2、在配置文件中添加SSO信息
qiniu:
oss:
access-key: ***
secret-key: ***
bucket: demo
directory: upload/
domain: https://qiniu.demo.com/
3、创建七牛云配置类
/**
* 七牛云OSS相关配置
*/
@Configuration
@ConfigurationProperties(prefix = "qiniu.oss")
@Getter
@Setter
public class QiniuConfig {
/**
* AC
*/
private String accessKey;
/**
* SC
*/
private String secretKey;
/**
* 存储空间
*/
private String bucket;
/**
* 上传目录
*/
private String directory;
/**
* 访问域名
*/
private String domain;
}
4、创建文件操作服务类
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.ruoyi.file.config.QiniuConfig;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.qiniu.storage.Region;
import java.io.IOException;
import java.util.UUID;
import com.qiniu.storage.Configuration;
/**
* 七牛云对象存储文件服务
*/
@Service("qiniuFileService")
public class QiniuFileServiceImpl {
private final QiniuConfig qiniuConfig;
public QiniuFileServiceImpl(QiniuConfig qiniuConfig) {
this.qiniuConfig = qiniuConfig;
}
public String upload(MultipartFile file) throws IOException {
if (file.isEmpty()) {
throw new RuntimeException("文件是空的");
}
// 创建上传token
Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey());
String upToken = auth.uploadToken(qiniuConfig.getBucket());
// 设置上传配置,Region要与存储空间所属的存储区域保持一致
Configuration cfg = new Configuration(Region.huadongZheJiang2());
// 创建上传管理器
UploadManager uploadManager = new UploadManager(cfg);
String originalFilename = file.getOriginalFilename();
// 构造文件目录和文件名
assert originalFilename != null;
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String fileKey = qiniuConfig.getDirectory() + UUID.randomUUID() + suffix;
// 上传文件
uploadManager.put(file.getInputStream(), fileKey, upToken, null, null);
// 返回文件url
return qiniuConfig.getDomain() + fileKey;
}
}