当前位置: 首页 > news >正文

阿里云OSS对象云储存入门操作

阿里云OSS服务

1.创建OSS数据桶

首先在阿里云对象存储服务OSS中创建好对应的数据桶,我的是gezishan-bucket1

在这里插入图片描述

2.创建AccessKey

认识AccessKey?

访问密钥AccessKey(简称AK)是阿里云提供给用户的永久访问凭据,由AccessKey ID和AccessKey Secret组成的一组密钥对

  • AccessKey ID:用于标识用户。
  • AccessKey Secret:是一个用于验证您拥有该AccessKey ID的密码。

AccessKey ID和AccessKey Secret根据算法由访问控制(RAM)生成,阿里云对AccessKey ID和AccessKey Secret的存储及传输均进行加密。

AccessKey不用于控制台登录,而是用于通过开发工具(API、CLI、SDK、Terraform等)访问阿里云时,发起的请求会携带AccessKey ID和AccessKey Secret加密请求内容生成的签名,进行身份验证及请求合法性校验。

AccessKey最佳实践

  • 强烈建议不要给阿里云账号(主账号)创建AccessKey。

    阿里云账号(主账号)默认拥有当前账号下所有云资源的Administrator权限,且无法修改。阿里云账号(主账号)的AccessKey泄露会威胁该账号下所有资源的安全。为保证账号安全,强烈建议您不要给阿里云账号(主账号)创建AccessKey,建议您创建专用于API访问的RAM用户并创建对应的AccessKey,完成最小化授权后,通过编程的方式访问阿里云资源。

  • 减少创建永久AccessKey,优先采用STS Token临时凭证方案,降低凭证泄露的风险。

  • 妥善保管AccessKey ID和AccessKey Secret,不要将AccessKey信息随意分享给其他人,或记录在公开的文档中。

  • 避免在代码中写入明文AccessKey信息。

  • AccessKey不再使用时及时禁用。

  • 定期轮转AccessKey,一个RAM用户启用一把AccessKey后另一把仅用于轮转。

  • 为RAM用户仅授予必要的最小权限。

操作步骤

  1. 登录RAM控制台。
  2. 在左侧导航栏,选择****身份管理** > *用户***。
  3. 用户页面,单击目标RAM用户名称。
  4. 认证管理页签下的AccessKey区域,单击创建AccessKey

在这里插入图片描述

授权访问

创建AccessKey相当于创建了一个子用户,要想能访问指定的数据桶,还要为指定的子用户授权,

后续每次上传文件都要携带AccessKeyId进行鉴权,若该AccessKeyId没有访问权限项目将报错。

在这里插入图片描述

选择授权的子用户

在这里插入图片描述

3.项目中使用OSS云服务

这是阿里云官网提供的demo

import java.io.*;
import java.util.Random;import com.aliyun.oss.*;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;public class OssJavaSdkQuickStart {/** 生成一个唯一的 Bucket 名称 */public static String generateUniqueBucketName(String prefix) {// 获取当前时间戳String timestamp = String.valueOf(System.currentTimeMillis());// 生成一个 0 到 9999 之间的随机数Random random = new Random();int randomNum = random.nextInt(10000); // 生成一个 0 到 9999 之间的随机数// 连接以形成一个唯一的 Bucket 名称return prefix + "-" + timestamp + "-" + randomNum;}public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException {// Endpoint以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com,其它Region请按实际情况填写。String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";String bucketName = generateUniqueBucketName("demo");// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。// 关于OSS支持的Region与Endpoint的对应关系,请参见https://www.alibabacloud.com/help/zh/oss/user-guide/regions-and-endpoints。String region = "cn-hangzhou";// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量EnvironmentVariableCredentialsProvider credentialsProvider =CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 创建OSSClient实例。// 当OSSClient实例不再使用时,调用shutdown方法以释放资源。ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();// 显式声明使用 V4 签名算法clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);OSS ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialsProvider).region(region).build();try {// 1. 创建存储空间(Bucket)ossClient.createBucket(bucketName);System.out.println("1. Bucket " + bucketName + " 创建成功。");// 2. 上传文件String objectName = "exampledir/exampleobject.txt";String content = "Hello OSS";ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));System.out.println("2. 文件 " + objectName + " 上传成功。");// 3. 下载文件OSSObject ossObject = ossClient.getObject(bucketName, objectName);InputStream contentStream = ossObject.getObjectContent();BufferedReader reader = new BufferedReader(new InputStreamReader(contentStream));String line;System.out.println("3. 下载的文件内容:");while ((line = reader.readLine()) != null) {System.out.println(line);}contentStream.close();// 4. 列出文件System.out.println("4. 列出 Bucket 中的文件:");ObjectListing objectListing = ossClient.listObjects(bucketName);for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {System.out.println(" - " + objectSummary.getKey() + " (大小 = " + objectSummary.getSize() + ")");}// 5. 删除文件ossClient.deleteObject(bucketName, objectName);System.out.println("5. 文件 " + objectName + " 删除成功。");// 6. 删除存储空间(Bucket)ossClient.deleteBucket(bucketName);System.out.println("6. Bucket " + bucketName + " 删除成功。");} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException | IOException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}
}

预配置

引入依赖

然后再项目的pom.xml中导入依赖:

 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency>

配置项

在实际开发中通常将一些配置信息在application.yml中配置。

需要配置关键的4个要素,分别是endpoint(服务器域名),bucketName(数据桶名),accessKeyId(连接秘钥),accessKeySecret(秘钥密码)

aliyun:oss:endpoint: xxxxxxxbucketName: xxxxxxxxxxxxxxaccessKeyId: xxxxxxxxxxxxxxaccessKeySecret: xxxxxxxxxxxxxxxxxxxxxxx

入门API

连接OSS对象

OSS ossclick = new OSClientBuilder().build(String endpoint,String accessKeyId,String accessKeySecret);
//上面三个参数均为String类型,含义见上

文件上传方法

OSS.putObject(String bucketName,String fileName,InputStream inputStream);
/*
bucketName 数据桶名
fileName 上传后的文件名
inputStream 待上传文件输入流
*/

关闭连接

OSS.shutdown()

工具类

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;public String upload(MultipartFile file) throws IOException {//获取上传文件的输入流InputStream inputStream = file.getInputStream();//设置文件名,避免覆盖String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到ossOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);  //文件上传方法//获取文件访问地址String url = "https://" + bucketName + "." + endpoint + "/" + fileName;//关闭ossClientossClient.shutdown();return url;}
}

service层调用

@Service
public class OSSFileServiceImpl extends ServiceImpl<MyFileMapper, MyFile> implements FileUploadService {@Resourceprivate AliyunOssUtil aliyunOssUtil;@Overridepublic Result saveFile(MultipartFile file) {try{String url = aliyunOssUtil.upload(file);return Result.success(url);}catch (Exception e){e.printStackTrace();return Result.error("文件上传失败,请联系管理员"+e.getMessage());}}
}

相关文章:

  • 【系统规划与管理师第二版】1.3 新一代信息技术及发展
  • [Java] 继承和多态
  • 【Python小练习】3D散点图
  • LeetCode 680.验证回文串 II
  • WinUI3开发_设置标题栏高度
  • .NET 4.7中使用NLog记录日志到数据库表
  • 通过Radius认证服务器实现飞塔/华为防火墙二次认证:原理、实践与安全价值解析
  • 非线性方程组求解:复杂情况下的数值方法
  • JavaScript Symbol 属性详解
  • GA3C(GPU/CPU混合式异步优势Actor-Critic)算法实现控制倒立摆
  • Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战
  • 创业知识概论
  • 【ing】Ubuntu安装Anaconda及环境配置\docker\pycharm
  • Qwen3 Embedding 结构-加载-训练 看透模型设计哲学
  • Linux——库文件生成和使用
  • ADC的传递函数
  • Spring 源码学习 2:Bean 后处理器
  • 大模型学习入门——Day3:注意力机制
  • 零基础入门PCB设计 一实践项目篇 第四章(STM32开发板PCB设计)
  • Seata:微服务分布式事务的解决方案
  • 男女裸体直接做的视频网站/网络营销策划的目的
  • 宣传型网站/论坛企业推广
  • 公司建设网站需求/google adsense
  • php java开发网站开发/外贸推广建站
  • 阿里云上做网站套模板怎么做/优化设计全部答案
  • 十大高端网站定制设计师/semir是什么牌子衣服