首页/新闻资讯/正文详情

C# 阿里云OSS对象存储

发布时间:2026/9/24 17:14:02 来源:云帆数科 栏目:资讯中心
C# 阿里云OSS对象存储
一、前言OSS对象存储可以理解为模拟电脑自带的文件资源管理器相当于在阿里云购买了一个临时盘去存储文件可以通过API调用收费模式主要集中在存储容量的大小以及流出流量即外部通过公网调用OSS存储文件二、准备1、 AccessKey And Secret阿里云网页右上角头像获取2、Bucket Name首先账户要开通OSS对象存储在“控制台”-搜索-“OSS对象存储”进入“OSS对象存储控制台”在“Bucket列表”-“创建Bucket”-完成后即可拿到 “Bucket 名称”关于创建对象存储类型的选择可以查看下方提示3、对象存储地址点击左上角”切换至轻量版“就可以查看到刚创建的存储对象鼠标单击进入的样式大概是这样下滑就可以看到API调用地址了外网地址是外部访问所调用的地址如url调用图片文件下载4、对象存储类型区分阿里云OSS目前提供5种主流存储类型覆盖从高频热数据到长期冷归档的全场景需求‌标准存储Standard‌面向热数据访问延迟低、读写性能强适合网站图片、用户头像、业务高频访问的素材支持本地冗余和同城冗余两种容灾模式。‌低频访问存储Infrequent Access‌面向每月访问频次较低的数据存储单价更低取回数据会产生少量取回费用适合备份文件、日志归档等非实时访问场景。‌归档存储Archive‌面向长期几乎不访问的归档数据存储成本极低文件读取需要等待数小时的解冻时间适合合规留存资料、历史业务备份。‌冷归档存储Cold Archive‌比归档存储成本更低解冻等待时间更长适合超长期半年以上完全不访问的冷数据。‌深度冷归档Deep Cold Archive‌成本最低的归档类型专为几乎永久不访问的合规存档数据设计存储单价仅为标准存储的1/3左右。提示一切以阿里云文档为准5、收费模式OSS的计费分为基础计费项和增值计费项两大类计费方式支持按量付费和预付费资源包两种模式https://www.aliyun.com/price/product?spma2c4g.11186623.0.0.1645772blLibWz#/oss/detail/oss三、API调用提示仅展示最基础调用样式1、前提string endpoint https://oss-cn-xxx.aliyuncs.com; // 替换为你的 Endpoint string accessKeyId xxx; // 替换为你的 AccessKey ID string accessKeySecret xxx; // 替换为你的 AccessKey Secret string bucketName xxx; // 替换为你的 Bucket 名称 var client new OssClient(endpoint, accessKeyId, accessKeySecret);下载Nuget包Aliyun.OSS.SDK.NetCore2、查询文件string nextMarker null; bool isTruncated true; int totalCount 0; while (isTruncated) { var listRequest new ListObjectsRequest(bucketName) { Marker nextMarker, MaxKeys 1000 // V1接口默认最大100也可设置更大但不超过1000 }; var result client.ListObjects(listRequest); // 处理当前页的文件 foreach (var summary in result.ObjectSummaries) { richTextBox1.AppendText($文件路径: {summary.Key}, 大小: {summary.Size},日期: {summary.LastModified} bytes\r\n); totalCount; } // 更新标记和状态 isTruncated result.IsTruncated; nextMarker result.NextMarker; } richTextBox1.AppendText($\r\n--- 列举完成共找到 {totalCount} 个文件 ---\r\n);3、创建文件夹//添加文件夹 var folderKey folder/folder1/; // 文件夹名称注意以斜杠结尾 var putObjectRequest new PutObjectRequest(bucketName, folderKey, new MemoryStream(Encoding.ASCII.GetBytes())); client.PutObject(putObjectRequest);4、删除文件夹//删除文件夹注意OSS 不支持直接删除非空文件夹需要先删除文件 var folderKey folder/newfolder/; var deleteFileRequest new DeleteObjectRequest(bucketName, folderKey); client.DeleteObject(deleteFileRequest);4、上传文件//添加文件夹 var folderKey folder/Image.png; // 文件名称注意不可斜杠结尾 var putObjectRequest new PutObjectRequest(bucketName, folderKey, new MemoryStream(Encoding.ASCII.GetBytes())); client.PutObject(putObjectRequest);5、下载文件//返回下载文件流 var imageKey folder/Image.png; // 图片名称 var getObjectRequest new GetObjectRequest(bucketName, imageKey); using (var ossObject client.GetObject(getObjectRequest)) { using (var stream ossObject.Content) { using (var fileStream new FileStream(F:\downloaded_image.png, FileMode.Create, FileAccess.Write)) { await stream.CopyToAsync(fileStream); richTextBox1.AppendText($文件已下载到: F:\\downloaded_image.png\r\n); } } }6、下载文件URL签名//生成阿里云oss对象url签名 var expiration DateTime.Now.AddMinutes(5);//5分钟后过期 var imageKey folder/Image.png; // 图片名称 var presignedRequest new GeneratePresignedUriRequest(bucketName, imageKey, SignHttpMethod.Get) { Expiration expiration }; var signedUrl client.GeneratePresignedUri(presignedRequest); richTextBox1.AppendText($签名URL: {signedUrl}\r\n);7、删除文件//删除文件 var imageKey folder/image.png; // 图片名称 var deleteFileRequest2 new DeleteObjectRequest(bucketName, imageKey); client.DeleteObject(deleteFileRequest2);8、URL路径预览图片(一)、申请一个新的二级域名作为转发oss公网地址防止强制下载文件这里不再详细讲解就是在 “域名与网站” 控制台- “云解析DNS”-“解析配置”-“公网权威解析”-主域名下“解析设置”新域名并作转发oss对象CNAME域名在oss对象存储控制台对应Bucket包详细url里可以找到oss对象存储控制台-可切换至轻量版-点击对应Bucket包-Bucket详细里往下滑(二)、关闭“阻止公共访问”Bucket包oss对象存储控制台-可切换至轻量版-点击对应Bucket包(三)、API授权文件开放string endpoint http://oss-cn-xxx.aliyuncs.com; // 替换为你的 Endpoint string accessId xxx; // 替换为你的 AccessID 阿里云账户头像下方账户id string accessKeyId xxx; // 替换为你的 AccessKey ID string accessKeySecret xxx; // 替换为你的 AccessKey Secret string bucketName xxx; // 替换为你的 Bucket 名称 string region cn-shenzhen; // 替换为你的 Region// 创建 OssClient var conf new ClientConfiguration { SignatureVersion Aliyun.OSS.SignatureVersion.V4 }; var client new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); // 定义要授权的文件夹路径以 folder/ 为例 var folderPrefix folder/*; // 构建 Bucket Policy JSON // 注意Principal 中的 UID 替换为被授权者的阿里云账号 UID 或 RAM 用户 UID // 如果授权给所有人匿名访问Principal 填 * string policy { Version: 1, Statement: [{ Effect: Allow, Action: [ oss:GetObject ], Principal: [ * ], Resource: [ ResourceInfo ], Condition: { Bool: { acs:SecureTransport: [ false ] } } }] }; // 替换占位符 policy policy.Replace(ResourceInfo, $acs:oss:*:{accessId}:{bucketName}/{folderPrefix}); richTextBox1.AppendText(policy);‌Effect: Allow‌‌含义‌‌允许‌。‌作用‌表示如果请求满足后续的所有条件Action, Principal, Resource, Condition则明确‌允许‌该操作。如果是Deny则表示拒绝。‌Action: [ oss:GetObject ]‌‌含义‌‌操作权限‌。‌作用‌指定允许执行的具体 API 操作。oss:GetObject对应下载/读取文件内容的接口。‌注意‌这里仅允许“下载”‌不允许‌上传oss:PutObject、删除oss:DeleteObject或列举文件oss:ListObjects。Action 名称对应 API / 操作功能说明‌oss:GetObject‌GetObject‌下载/读取‌对象内容。‌oss:PutObject‌PutObject‌上传/写入‌对象内容。‌oss:DeleteObject‌DeleteObject‌删除‌指定对象。‌oss:ListObjects‌ListObjects‌列举‌ Bucket 中的对象列表即查看文件列表。‌oss:GetBucketAcl‌GetBucketAcl获取 Bucket 的访问控制列表ACL信息。‌oss:PutBucketAcl‌PutBucketAcl设置 Bucket 的访问控制列表ACL。‌oss:RestoreObject‌RestoreObject解冻归档存储类型的对象使其可读取。‌oss:InitiateMultipartUpload‌InitiateMultipartUpload初始化分片上传任务大文件上传第一步。‌oss:UploadPart‌UploadPart上传分片数据大文件上传中间步骤。‌oss:CompleteMultipartUpload‌CompleteMultipartUpload完成分片上传合并文件大文件上传最后一步。‌*oss:**‌所有 OSS 操作通配符代表允许执行‌所有‌ OSS 相关操作慎用相当于完全控制权。‌Principal: [ * ]‌‌含义‌‌被授权主体‌。‌作用‌指定这条规则对谁生效。*代表‌所有用户‌包括匿名用户未登录的用户和任何阿里云账号下的用户。‌风险‌结合Allow效果这意味着任何人只要满足条件都可以访问。通常用于公开读场景但需配合严格的 Condition 使用。‌Resource: [ ResourceInfo ]‌‌含义‌‌资源范围‌。‌作用‌指定这条规则作用于哪些 OSS 资源。ResourceInfo是一个占位符实际使用时应替换为具体的资源 ARN阿里云资源名称。‌标准格式示例‌acs:oss:*:*:my-bucket/*表示my-bucket存储空间下的‌所有文件‌。acs:oss:*:*:my-bucket表示my-bucket这个‌存储空间本身‌通常用于 ListObjects 等 Bucket 级别操作。‌建议‌为了最小权限原则通常建议精确到具体前缀如acs:oss:*:*:my-bucket/public/*。‌Condition: { ... }‌‌含义‌‌生效条件‌。‌作用‌只有当请求满足这里的条件时上述的Allow才会生效。如果不满足条件即使 Action 和 Principal 匹配请求也会被拒绝除非有其他 Allow 策略。jsonBool: { acs:SecureTransport: [ false ] }‌Bool‌: 布尔值条件运算符。‌acs:SecureTransport‌: 一个特定的条件键用于检查请求是否使用了加密传输协议HTTPS。如果请求使用 ‌HTTPS‌该值为true。如果请求使用 ‌HTTP‌该值为false。‌[ false ]‌: 这里指定的值是false。

相关推荐

流程退回三次后,HR 要查规则有没有互相打架
流程退回三次后,HR 要查规则有没有互相打架

摘要:人事流程反复退回,问题常在规则冲突和解释口径不一致。肯耐珂萨提醒 HR,要从触发条件、审批责任和员工提示倒查规则设计细节。同一份申请被退回三次,员工已经不知道该改哪里了。第一次退回说附件缺少主管说明,第二… · 2026/9/24 17:13:56

不造整机,照样吃肉:揭秘人形机器人“卖铲人”的5大黄金标的
不造整机,照样吃肉:揭秘人形机器人“卖铲人”的5大黄金标的

在2026年这场轰轰烈烈的人形机器人淘金热中,无数整机厂商为了争夺“全球量产第一”的宝座打得头破血流。然而,在淘金热中最赚钱的,往往不是那些在泥水里摸爬滚打的淘金客,而是那些在路口卖铲子、卖牛仔裤的“卖铲人”。华鑫证券的… · 2026/9/24 17:13:50

423道 GIT 测试题(含解释) 381 - 400 题
423道 GIT 测试题(含解释) 381 - 400 题

为方便阅读,这里整理了整个系列的索引导航。本系列共 423 道 git 测试题(含简单的题目解释),按每 20 题为一篇进行连载,点击下方链接即可跳转到对应章节,方便你按需查阅、系统复习。 423道 GIT 测试题(含解释) 01 - 20 题 423道 GIT 测试题(含解释) 21 - 40 题 423道… · 2026/9/24 17:13:50

Apache Pulsar 本地单机模式(Standalone)快速上手指南:安装、启动、收发消息与停止
Apache Pulsar 本地单机模式(Standalone)快速上手指南:安装、启动、收发消息与停止

消息队列后端流处理 【免费下载链接】pulsar Apache Pulsar - distributed pub-sub messaging system 项目地址: https://gitcode.com/gh_mirrors/pulsar28/pulsar 点击查看 免费下载 本文以 Apache Pulsar 仓库中的 getting-started-standalone.md 为骨架&#xf… · 2026/9/24 18:23:39

FastAdmin接口调用实战:从Token验证到跨域与AJAX封装
FastAdmin接口调用实战:从Token验证到跨域与AJAX封装

FastAdmin 用起来确实顺手,后台管理类的 CRUD 基本靠点一点就能搞定,但一旦涉及到接口调用,尤其是前端要用 AJAX 去拿数据、外部系统要对接个接口,问题就冒出来了。最近在好几个技术群里看到大家在问 FastAdmin 接口调用相关的东西… · 2026/9/24 18:23:33

精密环形导轨系统全解析:从结构原理到选型调试与维护
精密环形导轨系统全解析:从结构原理到选型调试与维护

1. 精密环形导轨到底是什么:先建立整体认知这两年只要往自动化设备、光伏锂电、消费电子装配线这些地方跑一跑,基本都能看到环形导轨的身影。很多刚入行的工程师第一次见到它,会下意识觉得“这不就是直线导轨弯起来了吗”——这个理解不算错&… · 2026/9/24 18:23:33

2026年国产研发管理工具选型指南:Gitee替代Jira的深度评估
2026年国产研发管理工具选型指南:Gitee替代Jira的深度评估

1. 研发管理工具选型的底层逻辑与市场格局1.1 为什么“替代 Jira”在 2026 年成为必答题做研发管理的同行这两年应该都有明显感受:团队里讨论“要不要换掉 Jira”的频率越来越高。原因不复杂,我把它拆成三层来看。第一层是成本与合规。Jira 的 Server 版… · 2026/9/24 18:23:27

AI需求分析如何简化PRD文档工作:从口述到结构化需求
AI需求分析如何简化PRD文档工作:从口述到结构化需求

做了这么多年需求分析,我最大的感受不是“需求到底怎么做”,而是大部分时间都花在了文档整理这种低价值工作上。业务在微信里语音说一堆,产品经理开会记几页白板,研发那边却等着看一份像样的PRD——这一层转换成本,几乎… · 2026/9/24 18:23:27

网络约束与排放约束下的输电网风电协调优化实践
网络约束与排放约束下的输电网风电协调优化实践

让我们先从最熟悉的一个场景说起:风电大发的时候,电网却不敢让它满发。调度员看着风电预测曲线一路走高,只能一边叹气一边下指令“压出力”,因为送出线路的热稳定极限已经快到头了。如果你只把这当成“线路装不下”,那… · 2026/9/24 18:23:27

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码