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

阿里云对象存储OSS之Java - Soul

阿里云对象存储OSS

介绍

  • 阿里云对象存储OSS是一款非常强大的云存储服务——提供的海量、安全、低成本、高持久性的对象存储服务,通过RESTful API提供HTTP接口。
  • 核心特性
    • 无限扩展:存储空间和文件数量无上限。
    • 多存储类型:提供标准、低频访问、归档、冷归档、深度冷归档等多种存储类型,覆盖从热到冷的全部数据场景。
    • 高安全性:提供多种加密方式(服务器端/客户端)、权限控制、WORM(一次写入,多次读取)特性,满足合规要求。
    • 智能处理:内置图片处理、视频截帧等媒体处理功能。
  • 优势
    • 稳定可靠:支持大规模场景。
    • ​成本优化​​:按量付费,无最低消费,支持生命周期管理自动转换存储类型以节约成本。
    • ​简单易用​​:提供控制台、命令行工具、图形化工具及多种语言SDK,方便管理。
  • 应用场景
    • 网站/应用的动静分离,存储静态资源(图片、音视频、文档等)。
    • 静态网站托管
    • 数据备份与归档,结合生命周期管理降低长期存储成本。
    • 大数据分析AI的底层数据湖存储。
  • 核心概念
    • 存储空间:存储文件(对象)的容器,名称在OSS范围内必须全局唯一。可设置其所在地域、访问权限和存储类型等属性。
    • 对象/文件:这是OSS存储数据的基本单元,由数据本身、元数据键key组成。键可理解为文件的唯一标识,可包含类似目录结构的后缀(如 data/images/logo.jpg)来模拟文件夹层级
    • 地域:指OSS的数据中心所在的物理位置——用户离地域越近访问速度越快。
  • 使用方式控制台命令行工具SDK图形化桌面工具

Java代码

  • maven引入的aliyun-sdk-oss版本
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.11.2</version>
</dependency>
  • 配置类
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
@ConfigurationProperties(prefix = "aliyun.oss")
public class OSSConfig {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;@Bean(destroyMethod = "shutdown")public OSS ossClient() {return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);}
}
  • 服务类
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.yyds.admin.config.OSSConfig;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.io.InputStream;@Service
@RequiredArgsConstructor
public class OSSService {private final OSS ossClient;private final OSSConfig ossConfig;public static final String POINT = ".";/*** 上传文件* * @param file 文件* @param filePath 存放的路径* @return 文件路径*/public String uploadFile(MultipartFile file, String filePath) {try {ossClient.putObject(ossConfig.getBucketName(), filePath, file.getInputStream());/* 方式二:指定文件访问时的默认打开方式——如pdf文件,使用阿里云oss提供的默认域名访问文件时默认是下载,而不是预览。由于阿里云oss为自身安全考虑访问所使用策略,如需默认打开是预览,需要配置自己的域名进行访问。以下代码使用自定义域名访问时生效,使用阿里云oss提供的默认域名访问文件时将失效——阿里云oss平台策略优先级比代码控制高。PutObjectRequest request = new PutObjectRequest(ossConfig.getBucketName(), filePath, file.getInputStream());// 创建元数据对象并设置关键属性:Content-Type (MIME类型)、Content-DispositionObjectMetadata metadata = new ObjectMetadata();// 1、设置访问是预览模式 inlinemetadata.setContentDisposition("inline");// 2、设置访问是下载模式 attachmentmetadata.setContentDisposition("attachment");metadata.setContentType("application/pdf");request.setMetadata(metadata);ossClient.putObject(request);*/} catch (IOException e) {throw new RuntimeException(e.getMessage());}return "https://" + ossConfig.getBucketName() + POINT + ossConfig.getEndpoint() + File.separator + filePath;}/*** 下载文件 以字节数组形式返回 根据完整的path下载* @param filePath 下载文件路径 如:https://guangzhou.aliyuncs.com/data/pdf/2025/10/7/2345.pdf* @return 字节数组*/public byte[] downLoad(String filePath) {try {OSSObject object = ossClient.getObject(new GetObjectRequest(ossConfig.getBucketName(), formatPath(filePath)));InputStream stream = object.getObjectContent();return stream.readAllBytes();} catch (Exception e) {throw new RuntimeException(e.getMessage());}}/*** 指定路径文件上传* @param file 文件* @param filePath 指定路径 如:http://guangzhou.aliyuncs.com/data/pdf/2025/10/7/2345.pdf* @return 完整文件路径*/public String uploadFileAttachPath(MultipartFile file, String filePath) {try {ossClient.putObject(ossConfig.getBucketName(), formatPath(filePath), file.getInputStream());} catch (IOException e) {throw new RuntimeException(e.getMessage());}return filePath;}/*** 删除文件* @param filePath 文件路径*/public void deleteFile(String filePath) {try {ossClient.deleteObject(ossConfig.getBucketName(), formatPath(filePath));} catch (Exception e) {throw new RuntimeException(e.getMessage());}}/*** 根据路径获取不包含Bucket名称在内的Object完整路径:data/pdf/2025/10/7/2345.jpg* @param filePath 文件路径*/public String formatPath(String filePath) {String path = "https://" + ossConfig.getBucketName() + POINT + ossConfig.getEndpoint() + File.separator;return  filePath.replace(path, "");}
}
http://www.zskr.cn/news/26700.html

相关文章:

  • Solidity合约继承场景下的构造函数执行顺序
  • 反数字化:线下活动也能年赚百万
  • sqlserver 主要的日期函数及用法示例
  • 图论刷题记录
  • 英语_备忘_疑难
  • 「JOISC2020-掃除」题解
  • CF简单构造小计
  • 软件工程第三次作业:四则运算题目生成器 - Nyanya-
  • Linux7种文件类型
  • AI代码生成技术解析与应用实践
  • 银河麒麟Kylin申威SW64系统安装 rpcbind-1.2.5-2.p01.ky10.sw_64.rpm 方法
  • 题解:P12525 [Aboi Round 1] 私は雨
  • 杂谈
  • 定位问题3:明明堆栈已经打印出来了,偏就是定位不出来?
  • 鸿蒙hdc命令【杭州多测师】
  • 电脑黑屏只剩鼠标-解决方案 - 教程
  • leetcode448. 找到所有数组中消失的数字
  • 揭开 C++ vector 底层面纱:从三指针模型到手写完整实现 - 指南
  • Java中的注释
  • 2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏专业制造商精选
  • Day1标签语法
  • home-assistant-Concepts and terminology概念和术语
  • 2025年定型机厂家推荐排行榜,拉幅定型机,门富士定型机,节能定型机,余热回收,废气回收,烟气回收,智能排风,双层定型机公司推荐
  • 有关K8s calico IPIP模式的一些疑惑和思考
  • UMDF驱动开发入门:创建虚拟设备,从安装到I/O交互全解析
  • 从零开始,搭建自己的AI平台写小说
  • 2025年AI优化公司电话推荐:十家可验证服务商沟通备忘
  • 2025深圳离婚律所电话推荐:家理律所福田诺德中心25楼
  • 2025年深圳离婚律所电话推荐:家理福田诺德中心婚姻家事专线
  • 生日