官方地址:对象存储 OSS_云存储服务
示例代码地址:GitHub aliyun-oss-spring-boot-sample
上传策略:服务端签名后直传
通过服务器处理签名,但不处理文件,保证加密的同时,减轻服务的压力
开通
登录阿里云账号
选择oss服务进行开通
进入OSS管理控制台,创建一个bucket
鼠标悬浮右上角头像,点击AccessKey管理
选择使用子用户AccessKey
创建一个用户,并分配oss的读写权限
得到AccessKey ID
、AccessKey Secret
得到Endpoint
(即外网访问地址)
搭建子项目
gulimall-third-party
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-third-party</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall-third-party</name>
<description>gulimall-third-party</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-oss-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<!--导入高版本的sdk-oss-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.5</version>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
yml
spring:
application:
name: gulimall-third-party
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
namespace: 24e69e01-f921-48bd-9888-41eceff74341
group: DEFAULT_GROUP
config:
import:
- optional:nacos:oss.yml?refresh=true
server:
port: 30000
#以下是配置在nacos中的oss.yml
alibaba:
cloud:
access-key: 你的access-key
secret-key: 你的secret-key
oss:
endpoint: oss-cn-beijing.aliyuncs.com #外网访问地址
GulimallThirdPartyApplication.java
@SpringBootApplication
@EnableDiscoveryClient
public class GulimallThirdPartyApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallThirdPartyApplication.class, args);
}
}
测试类:
@SpringBootTest(classes = GulimallThirdPartyApplication.class)
class GulimallThirdPartyApplicationTest {
@Autowired
OSSClient ossClient;
@Test
public void testUpload() throws FileNotFoundException {
//上传文件流。
InputStream inputStream = new FileInputStream("C:\\Users\\admin\\Pictures\\1.jpg");
ossClient.putObject("bucketName", "Naruto.jpg", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
System.out.println("上传成功.");
}
}
结果:
前端请求跨域配置:
注意
- 注意使用新的starter,
aliyun-oss-spring-boot-starter
aliyun-oss-spring-boot-starter
的sdk-oss版本(3.1.0)过低,当前springboot 版本较高(2.6.11)所以添加了更高版本的sdk-oss
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
com.alibaba.cloud.context.AliCloudSdk.<init>(AliCloudSdk.java:76)
The following method did not exist:
com.aliyuncs.profile.DefaultProfile.getHttpClientConfig()Lcom/aliyuncs/http/HttpClientConfig;
The method's class, com.aliyuncs.profile.DefaultProfile, is available from the following locations:
jar:file:/D:/Tools/maven/com/aliyun/aliyun-java-sdk-core/3.4.0/aliyun-java-sdk-core-3.4.0.jar!/com/aliyuncs/profile/DefaultProfile.class
The class hierarchy was loaded from the following locations:
com.aliyuncs.profile.DefaultProfile: file:/D:/Tools/maven/com/aliyun/aliyun-java-sdk-core/3.4.0/aliyun-java-sdk-core-3.4.0.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of com.aliyuncs.profile.DefaultProfile
- 视频的oss.yml配置已经不再适用,请参考阿里的示例代码配置
- 配置跨域后生效需要一点时间