使用华为云的obs作为文件服务
使用springdata jpa框架操作数据库
创建springboot项目,添加华为云obs的SDK的maven依赖
<!-- 开启spring配置类 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 华为云obs的SDK -->
<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java</artifactId>
<version>[3.19.7,)</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
版本号[3.19.7,)没有问题,表示自动选择最高版本,最低使用3.19.7版本
自定义配置类,并读取配置
# 华为云 obs地址
obs.endPoint=华为云的obs的endpoint地址
obs.ak=华为云账号的ak
obs.sk=华为云账号的sk
obs.bucket=华为云的obs创建的桶名称,建议在华为云obs控制台创建,也可以使用SDK创建
在pom的依赖中配置开启spring的配置类,创建配置类ObsConfigProperties
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data // lombok注解
@Component // 将此类加载到spring容器中
@ConfigurationProperties(prefix = "obs") // 与配置文件中obs的前缀对应
public class ObsConfigProperties {
private String endPoint;
private String ak;
private String sk;
private String bucket;
}
在后面的代码中就可以使用
@Autowired
private static ObsConfigProperties properties;
加载配置信息,也可以使用的@Value("${obs.endPoint}") 方式加载配置
编写文件上传下载的工具类
import com.obs.services.ObsClient;
import com.obs.services.model.ObsObject;
import com.obs.services.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
/**
* 以uuid作为存放在华为云的文件名
*
*/
@Component
public class ObsUtils {
private static ObsConfigProperties properties;
private static ObsClient obsClient;
/**
* 通过输入流的方式上传文件
* @param url 上传到OBS桶中的路径
* @param inputStream
* @return
*/
public static String uploadFile(String url, InputStream inputStream) {
PutObjectResult putObjectResult = obsClient.putObject(properties.getBucket(), url, inputStream);
int statusCode = putObjectResult.getStatusCode();
if (statusCode != 200) {
throw new RuntimeException("文件上传异常,http响应码为" + statusCode);
}
return url;
}
/**
* 根据文件的路径获取文件的输入流
*
* @param url
* @return
* @throws IOException
*/
public static InputStream downFile(String url) throws IOException {
ObsObject obsObject = obsClient.getObject(properties.getBucket(), url);
Long contentLength = obsObject.getMetadata().getContentLength();
return obsObject.getObjectContent();
}
@PostConstruct
public void init() {
obsClient = new ObsClient(properties.getAk(), properties.getSk(), properties.getEndPoint());
}
@Autowired
public void setProperties(ObsConfigProperties