# 💍 阿里云对象存储 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)
Java1 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;
public interface OssService {
String uploadFileAvatar(MultipartFile file); }
|
# 在从 service 包创建一个文件 (impl)
Java1 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;
@Service public class OssServiceImpl implements OssService {
@Override public String uploadFileAvatar(MultipartFile file) {
String endpoint = ConstantPropertiesUtils.END_POIND; String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID; String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET; String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try { OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
InputStream inputStream = file.getInputStream();
String filename = file.getOriginalFilename(); ossClient.putObject(bucketName, filename, inputStream); ossClient.shutdown();
String url = "https://" + bucketName + "." + endpoint + "/" + filename; return url; } catch (Exception e) { e.printStackTrace(); return null; }
} }
|
# 💍 然后再创建一个 (controller) 包名
在 controller 下创建一个类即可
Java1 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;
@Api(description = "Oss文件上传") @RestController @RequestMapping("/eduoss/fileoss") @CrossOrigin public class OssController {
@Autowired private OssService ossService;
@PostMapping @ApiOperation(value = "文件上传") public R uploadoss(MultipartFile file) { String url = ossService.uploadFileAvatar(file); return R.ok().data("url", url); } }
|
# 💍 配置文件 (application.properties)
properties1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
server.port=8002
spring.application.name=service-oss
spring.profiles.active=dev
aliyun.oss.file.endpoint=your endpoint aliyun.oss.file.keyid=your accessKeyId aliyun.oss.file.keysecret=your accessKeySecret
aliyun.oss.file.bucketname=your bucketname
|
# 💍 工具类 (utils)
Java1 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;
@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 相关内容,感谢一直以来对 < 码坑 > 博客支持的朋友!