#应用场景#
在创建网站页面的时间,
当我们需要在后端向前端发送图片等静态资源,我们无法将资源存储在本地来进行数据的传送。因此本期将会先容一种新的存储方式——云端存储以及其使用方法。
#情况预备#
1.我们将使用阿里云OSS作为云端仓库,需要创建阿里云账号并且获得accessKeyId和accessKeySecret。
2.在java项目中引入依靠
- <dependency>
- <groupId>com.aliyun.oss</groupId>
- <artifactId>aliyun-sdk-oss</artifactId>
- <version>3.17.4</version>
- </dependency>
复制代码 3.创建AliOSSProperties记录所需上传的要素(这里通过yml文件的映射对类中的元素进行赋值)
- @Data //为类中配备get和set方法
- @Component //将bean放入IOC容器管理
- @ConfigurationProperties(prefix = "aliyun.oss")//YML文件的映射
- public class AliOSSProperties {
- private String accessKeyId;
- private String accessKeySecret;
- private String bucketName;
- private String endpoint;
- }
复制代码 4.创建Utils工具类
- @Component //将bean放入IOC容器中管理
- public class AliOSSUtils {
- private final AliOSSProperties aliOSSProperties;
- @Autowired //通过注入IOC容器中的Bean对象对本类中的aliOSSProperties进行赋值
- public AliOSSUtils(AliOSSProperties aliOSSProperties) {
- this.aliOSSProperties = aliOSSProperties;
- }
- /**
- * 实现上传图片到OSS
- */
- public String upload(MultipartFile file) throws IOException {
- // 获取上传的文件的输入流
- InputStream inputStream = file.getInputStream();
- // 避免文件覆盖
- String originalFilename = file.getOriginalFilename();
- String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
- // 上传文件到 OSS
- OSS ossClient = new OSSClientBuilder().build(
- aliOSSProperties.getEndpoint(),
- aliOSSProperties.getAccessKeyId(),
- aliOSSProperties.getAccessKeySecret()
- );
- ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream);
- // 文件访问路径
- String url = aliOSSProperties.getEndpoint().split("//")[0] + "//" +
- aliOSSProperties.getBucketName() + "." +
- aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;
- // 关闭ossClient
- ossClient.shutdown();
- return url; // 把上传到oss的路径返回
- }
- }
复制代码 5.在uploadControlller层调用Utils方法
- @Slf4j
- @RestController
- public class UploadController {
- @Autowired
- AliOSSUtils aliOSSUtils;
- @PostMapping("/upload")
- public Result upload(MultipartFile image) throws IOException {
- log.info("文件上传{}",image.getOriginalFilename());
- //调用工具类
- String url = aliOSSUtils.upload(image);
- log.info("文件上传完成,文件url:",url);
- return Result.success(url);
- }
- }
复制代码 #自我反思#
1.UUID的使用
首先,UUID的使用并不需要引入依靠。UUID是一个可以直接通过import包来导入的随机数生成工具,在本次代码中,UUID的引入是为了解决存储文件时间,相同命名导致的文件复写题目。
2.yml配置文件
在Spring Boot项目中,通常使用application.yml文件来存储配置信息。Spring Boot会自动加载该文件中的配置,并将其映射到相应的配置类或情况变量中。
- # 应用程序的基本信息
- spring:
- application:
- name: my-application
- # 数据库配置
- spring:
- datasource:
- url: jdbc:mysql://localhost:3306/mydb
- username: root
- password: password
- driver-class-name: com.mysql.cj.jdbc.Driver
- # 服务器配置
- server:
- port: 8080
- servlet:
- context-path: /api
- # 日志配置
- logging:
- level:
- root: INFO
- com.example: DEBUG
复制代码 这是一份yml配置文件我们可以使用两种方法来映射:
方法一使用@ConfigurationProperties注解将配置文件中的内容映射到Java类中
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.stereotype.Component;
- @Component
- @ConfigurationProperties(prefix = "spring.datasource")
- public class DataSourceConfig {
- private String url;
- private String username;
- private String password;
- private String driverClassName;
- }
复制代码
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- @Component
- public class AppConfig {
- @Value("${server.port}")
- private int port;
- @Value("${spring.datasource.url}")
- private String dbUrl;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |