# 💍 阿里云对象存储 Oss 介绍


阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过本文档提供的简单的 REST 接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于 OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。


# 使用限制

您使用的 OSS 资源和相关功能,都有一定的限制,具体请参见 OSS 使用限制

# 使用说明

OSS API 参考主要介绍接口的请求语法、相关参数含义以及请求和返回示例。如果要进行快速二次开发,建议您使用 SDK 开发包。关于 SDK 的安装和使用,请参见 OSS SDK 参考

# 错误码

请参见 OSS 常见错误响应

# 💍 资源术语

中文 英文 说明
存储空间 Bucket 存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。
对象 / 文件 Object 对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。
地域 Region 地域表示 OSS 的数据中心所在物理位置。您可以根据费用、请求来源等综合选择数据存储的地域。详情请查看 OSS 已经开通的 Region
访问域名 Endpoint Endpoint 表示 OSS 对外服务的访问域名。OSS 以 HTTP RESTful API 的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。具体的内容请参见各个 Region 对应的 Endpoint
访问密钥 AccessKey AccessKey,简称 AK,指的是访问身份验证中用到的 AccessKeyId 和 AccessKeySecret。OSS 通过使用 AccessKeyId 和 AccessKeySecret 对称加密的方法来验证某个请求的发送者身份。AccessKeyId 用于标识用户,AccessKeySecret 是用户用于加密签名字符串和 OSS 用来验证签名字符串的密钥,其中 AccessKeySecret 必须保密。

# 💍 我们以 [Java] 实现 oss 文件上传

# 我们先创建一个包名 (service)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

package com.ahjie.oss.service;

import org.springframework.web.multipart.MultipartFile;

/**
* @ProjectName: ahjie_parent
* @Package: com.ahjie.oss.service
* @ClassName: OssService
* @Author: 码 坑
* @Description: OssService
* @Date: 2021/5/10 16:51
* @Version: 1.0
*/
public interface OssService {

//上传头像到oss
String uploadFileAvatar(MultipartFile file);
}

# 在从 service 包创建一个文件 (impl)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

package com.ahjie.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.ahjie.oss.service.OssService;
import com.ahjie.oss.utlis.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
* @ProjectName: ahjie_parent
* @Package: com.ahjie.oss.service.impl
* @ClassName: OssServiceImpl
* @Author: 码 坑
* @Description: OssServiceImpl
* @Date: 2021/5/10 16:53
* @Version: 1.0
*/
@Service
public class OssServiceImpl implements OssService {

//上传头像到oss
@Override
public String uploadFileAvatar(MultipartFile file) {

// 通过工具类获取值 ConstantPropertiesUtils
String endpoint = ConstantPropertiesUtils.END_POIND;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 获取文件上传的输入流
InputStream inputStream = file.getInputStream();

//获取文件名称
String filename = file.getOriginalFilename();
// 调用oss方法实现文件上传
//第一个参数 Bucket名称
//第二个参数 上传到oss文件路径和文件名称
//第三个参数 上传文件输入流
ossClient.putObject(bucketName, filename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();

//把上传的之后路径返回
//需要把文件上传到阿里云oss路径手动拼接出来
String url = "https://" + bucketName + "." + endpoint + "/" + filename;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
}

}
}

# 💍 然后再创建一个 (controller) 包名

在 controller 下创建一个类即可

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

package com.ahjie.oss.controller;

import com.atguigu.oss.service.OssService;
import com.atguigu.utils.commutils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
* @ProjectName: ahjie_parent
* @Package: com.ahjie.oss.controller
* @ClassName: OssController
* @Author: 码 坑
* @Description: OssController
* @Date: 2021/5/10 16:50
* @Version: 1.0
*/
@Api(description = "Oss文件上传")
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin //防止调用跨越
public class OssController {

@Autowired
private OssService ossService;

//上传文件方法
@PostMapping
@ApiOperation(value = "文件上传")
public R uploadoss(MultipartFile file) {
//获取上传文件 MultipartFile
//返回上传阿里oss的文件路径
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url", url);
}
}

# 💍 配置文件 (application.properties)

properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

#服务端口
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 accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=your bucketname

# 💍 工具类 (utils)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.ahjie.oss.utlis;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
* @ProjectName: ahjie_parent
* @Package: com.ahjie.oss.utlis
* @ClassName: ConstantPropertiesUtils
* @Author: 码 坑
* @Description: ConstantPropertiesUtils
* @Date: 2021/5/10 14:45
* @Version: 1.0
*/
@Component
public class ConstantPropertiesUtils implements InitializingBean {

//读取配置文件内容

@Value("${aliyun.oss.file.endpoint}")
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_POIND;

public static String ACCESS_KEY_ID;

public static String ACCESS_KEY_SECRET;

public static String BUCKET_NAME;


@Override
public void afterPropertiesSet() throws Exception {
END_POIND = endpoint;

ACCESS_KEY_ID = keyId;

ACCESS_KEY_SECRET = keySecret;

BUCKET_NAME = bucketName;
}
}

# 以下是 oss 文件上传测试测试结果

测试效果图


# 以上内容以 Java 实现阿里云对象存储 Oss 文件上传的实现步骤,如果以上内容对你有帮助,可以请我 (喝奶茶哦!) 后期持续更新更多 Java 相关内容,感谢一直以来对 < 码坑 > 博客支持的朋友!


更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

码坑 微信支付

微信支付

码坑 支付宝支付

支付宝支付

码坑 QQ支付

QQ支付