1、项目中引入依赖
<!-- 华为OBS-->
<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java</artifactId>
<version>3.21.11</version>
</dependency>
2、配置文件中写入密钥、 地址、桶名
# huawei obs配置
huaweiyun:
url: http://xxx.xxx.x.x
accessKey: xxxxx
secretKey: xxxxxxxx
bucketName: xxx
3、创建配置文件中对应属性的实体类
@Data
@Configuration
@ConfigurationProperties(prefix = "huaweiyun")
public class HweiOBSConfig
{
//服务地址
private String url;
//用户名
private String accessKey;
// 密码
private String secretKey;
// 存储桶名称
private String bucketName;
}
4、 编写工具类,定义文件上传的方法
@Component
public class HuaWeiOBSUtills
{
@Autowired
private HweiOBSConfig hweiOBSConfig;
@Autowired
private ObsClient obsClient;
/**
* Minio文件上传接口
*
* @param file 上传的文件
* @return 访问地址
* @throws Exception
*/
public String uploadFile(MultipartFile file) throws Exception {
String bucketName = hweiOBSConfig.getBucketName();
// 判断桶是否存在
boolean exists = obsClient.headBucket(bucketName);
if(!exists){
// 若不存在,则创建桶
HeaderResponse response = obsClient.createBucket(bucketName);
log.info("创建桶成功" + response.getRequestId());
}
String fileName = FileUploadUtils.extractFilename(file);
InputStream inputStream = file.getInputStream();
long available = inputStream.available();
PutObjectRequest request = new PutObjectRequest(bucketName,fileName,inputStream);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(available);
request.setMetadata(objectMetadata);
// 设置对象访问权限为公共读
request.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);
PutObjectResult result = obsClient.putObject(request);
// 读取该已上传对象的URL
log.info("已上传对象的URL" + result.getObjectUrl());
inputStream.close();
return hweiOBSConfig.getUrl() + "/" + hweiOBSConfig.getBucketName() + "/" + fileName;
}
}
5、调用工具类方法上传文件
@RestController
public class SysFileController
{
@Autowired
private HuaWeiOBSUtills huaWeiOBSUtills ;
/**
* 文件上传请求
*/
@PostMapping("upload")
public R<SysFile> upload(MultipartFile file)
{
try
{
// 上传并返回访问地址
String url = huaWeiOBSUtills.uploadFile(file);
SysFile sysFile = new SysFile();
sysFile.setName(FileUtils.getName(url));
sysFile.setUrl(url);
return R.ok(sysFile);
}
catch (Exception e)
{
log.error("上传文件失败", e);
return R.fail(e.getMessage());
}
}
}