在开始写代码前,还需要配置依赖。在后端工程pom文件中之前已经配置了oss相关内容,这里摘录下。

<aliyun-sdk-oss.version>3.1.0</aliyun-sdk-oss.version>

在后端service模块下创建service_oss子模块。在这个模块中引入oss的相关依赖。

<!-- 阿里云oss依赖 -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!--日期工具栏依赖-->
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
</dependency>

在该模块的resource中创建application.properties.注意将其中oss的配置替换成自己在阿里云官网上对应生成的配置,注意替换时密钥不要复制多了空格。

#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=your endpoint
aliyun.oss.file.keyid=your keyid
aliyun.oss.file.keysecret=your keysecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=your bucketname

新建启动类。包结构见代码。

package com.wangzhou.oss;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = "com.wangzhou")
public class OssApplication {
    public static void main(String[] args) {
        SpringApplication.run(OssApplication.class, args);
    }
}

启动。遇到如下问题。

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

这是因为我们在上传头像时不需要使用数据库,没有配置数据库,因此启动项目时去找数据库的配置无法找到。在启动类注解中添加如下属性即可解决。

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

oss相关的配置都是固定的值,我们前面把它们写到了配置类中,但是我们在代码中要使用这些值,需要创建一个常量类来读取这些值。

在启动类的同级目录建立utils包,包下建类ConstantPropertisUtils

@Component //将这个类交给spring管理
public class ConstantPropertisUtils implements InitializingBean {
    @Value("${aliyun.oss.file.endpoint}") // spring注解,用于将值注入属性
    private String endpoint;
    @Value("${aliyun.oss.file.keyid}")
    private String keyid;
    @Value("${aliyun.oss.file.keysecret}")
    private String keysecret;
    @Value("${aliyun.oss.file.bucketname}")
    private String bucketname;

    public static String END_POINT;
    public static String KEY_ID;
    public static String KEY_SECRET;
    public static String BUCKET_NAME;

    @Override // 项目启动后,这个bean被实例化后执行该方法,将属性赋值给静态常量,后面在其它类中用这些属性就变得简单了。
    public void afterPropertiesSet() throws Exception {
        KEY_ID=this.keyid;
        KEY_SECRET=this.keysecret;
        END_POINT=this.endpoint;
        BUCKET_NAME=this.bucketname;
    }
}