.Net程序测试阿里云OSS开放存储服务

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/41862311 阿里云官网有提供OSS相关的操作API文档和.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/41862311

阿里云官网有提供OSS相关的操作API文档和.Net程序的 SDK,也可以在这里下载OSS相关文件

但是API文档里面的都是通过http请求和响应的消息来描述如何操作OSS的

而一般在程序中需要的是OSS操作类的说明

本文将通过.Net SDK来创建一个简单的程序连接并测试OSS,并举出几个常见的操作例子

在所有测试开始之前,首先要知道连接并操作OSS上面Bucket或Object的大概流程(关于Bucket和Object的概念详见官网解释)

OssClient类

顾名思义,是客户端连接OSS并提供相关操作的类

其构造函数有四个,详见.Net SDK帮助文档,如图:


本文中只是用第二个构造函数(其余可自行研究)

OssClient ossClient = new OssClient("OSS的地址","AccessId","AccessKey");

三个参数中,OSS的地址是根据OSS所在的地区决定的

比如在深圳的OSS地址为http://oss-cn-shenzhen.aliyuncs.com

杭州的OSS地址为http://oss-cn-hangzhou.aliyuncs.com

其余地区类似

AccessId和AccessKey可以在阿里云用户中心得到

点击用户中心,进入我的服务

我们可以通过一个OssManager类来管理和创建OssClient

    public static class OssManager
    {
        private static string _accessId = "youAccessId";
        private static string _accessKey = "yourAccessKey";
        private static string _http = "http://oss-cn-shenzhen.aliyuncs.com";

        private static OssClient ossClient;

        public static OssClient GetInstance()
        {
            if (ossClient == null)
            {
                ossClient = new OssClient(_http, _accessId, _accessKey);
            }
            return ossClient;
        }

        
    }


Bucket常见操作:


创建Bucket和删除Bucket

由于这两种操作的代码类似,只是操作类型不一样

所以定义一个枚举

    public enum OperationType
    {
        Create,
        Delete
    }

新建BucketOperator类

public static class BucketOperator
    {
        /// <summary>
        /// Bucket操作的方法
        /// </summary>
        /// <param name="type">操作类型</param>
        /// <param name="bucketName">bucketName</param>
        /// <param name="msg">输出的消息</param>
        /// <returns>0表示成功,否则失败</returns>
        public static int Operator(OperationType type, string bucketName, out string msg)
        {
            if (bucketName == "")
            {
                msg = "please input the bucket name!";
                return -1;
            }
            //获得一个OssClient实利
            OssClient client = OssManager.GetInstance();
            try
            {
                //判断操作类型
                switch (type)
                {
                    case OperationType.Create:
                        //执行创建Bucket
                        client.CreateBucket(bucketName);
                        break;
                    case OperationType.Delete:
                        //执行删除Bucket
                        client.DeleteBucket(bucketName);
                        break;
                    default:
                        break;
                }
                msg = "";
                return 0;

            }
            //通过OssException Oss异常类来捕获异常
            catch (OssException ex)
            {
                //创建Bucket时该名称的Bucket已存在
                if (ex.ErrorCode == OssErrorCode.BucketAlreadyExists)
                {
                    msg = string.Format("Bucket '{0}' already exists, please modify and recreate it.",
                        bucketName);
                }
                //其他异常处理
                else
                {
                    msg =
                        string.Format("Create failed. Error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                            ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
                }
                return -1;
            }
        }
    }


接下来建立一个web应用程序来测试

在项目中添加BucketTest.aspx页面,拖入一个文本框以输入BucketName和两个按钮

在后台按钮的点击事件中调用OssManeger类和BuekctOperator类来进行Bucket的创建和删除操作

protected void btnCreate_Click(object sender, EventArgs e)
        {
            string msg = "";
            int res = BucketOperator.Operator(OperationType.Create, txtName.Text, out msg);
            if (res != 0)
            {
                Response.Write(msg);
            }
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            string msg = "";
            int res = BucketOperator.Operator(OperationType.Delete, txtName.Text, out msg);
            if (res != 0)
            {
                Response.Write(msg);
            }
        }


接下来就可以就行对Bucket操作的测试了

先打开OSS控制台,可以看到Bucket只有一个:jchubby

运行BucketTest.aspx页面

输入jchubby1,点击创建

重新刷新Bucket列表,创建成功

输入一个已经存在的Bucket名,如:bookshop

添加失败,输出失败异常的信息


输入jchubby1点击删除,再次刷新Bucket列表,jchubby1删除成功


新建ObjectTest.aspx页面

Object常见操作:

PutObject--将一个指定的Object加入指定的Bucket中

说白了这个方法就是讲本地的一个文件转成OssObject然后存储到OSS中指定的Bucket中

由于是Web页面,这里使用到了SWFUpload上传文件

有关SWFUpload的配置使用请看:SWFUpload配置

注意,在IE浏览器可能会禁用加载一些选项导致SWFUpload无法显示

设置SWFUpload的接受页面是upload.ashx

在upload.ashx ProcessRequest方法中,代码如下:

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //获得上传的文件
            HttpPostedFile file = context.Request.Files["Filedata"];
            if (file != null)
            {
                //获取当前时间
                string firstName = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                //获取文件后缀
                string lastName = Path.GetExtension(file.FileName);
                //组合成保存的文件名
                string fullName = firstName + lastName;
                //if (!string.IsNullOrEmpty(c.prefix))
                //    fullName = c.prefix + "/" + fullName;
                ObjectMetadata metadata = new ObjectMetadata();
                // 可以设定自定义的metadata。
                metadata.ContentType = file.ContentType;
                //获取该文件的输入流
                using (var fs = file.InputStream)
                {
                    OssClient ossClient = OssManager.GetInstance();
                    //将该文件流保存到OSS中
                    var ret = ossClient.PutObject("jchubby", fullName, fs, metadata);
                }
                context.Response.Write("ok;" + fullName);
            }
        }


运行ObjectTest.aspx页面


点击批量上传

随便选择两个文件


确定之后开始上传

成功之后到OSS控制台对应的Bucket下查看

上传成功



ListObjects("bucketName")--获得指定Bucket下的所有Object列表

在ObjectTest页面的Page_Load事件中获得指定Bucket下的Object列表,并显示

代码如下:

protected List<OssObjectSummary> list;
        private OssClient client;
        protected void Page_Load(object sender, EventArgs e)
        {
            client = OssManager.GetInstance();
            ObjectListing listing = client.ListObjects("jchubby");
            list = listing.ObjectSummaries.ToList();
        }

在前台页面,通过一个foreach遍历list集合

<table>
            <tr>
                <td>BucketName
                </td>
                <td>Key
                </td>
                <td>LastModified
                </td>
                <td>Size
                </td>
                <td>StorageClass
                </td>
                <td>
                    Operation
                </td>
            </tr>
            <% foreach (OssObjectSummary item in list)
               {
            %>
            <tr>
                <td><%=item.BucketName %>
                </td>
                <td><%=item.Key %>
                </td>
                <td><%=item.LastModified %>
                </td>
                <td><%=item.Size %>
                </td>
                <td><%=item.StorageClass %>
                </td>
            </tr>
            <% } %>
        </table>


运行ObjectTest页面

获取成功

关于OssObjectSummary类的相关属性请看.Net SDK帮助文档


GetObject--获得执行Bucket下执行的Object

DeleteObject--删除指定Bucket下的Object

GetObject这个方法其实就是根据给的BucketName和ObjectKey来得到OSS上存储的文件

要保存在本地电脑的话需要用文件流来保存

在ObjectTest页面中拖入控件如下:

在获取按钮的点击事件中,代码如下:

protected void btnGet_Click(object sender, EventArgs e)
        {
            //获取Object
            OssObject obj = client.GetObject("jchubby", txtName.Text.Trim());
            if (obj != null)
            {
                try
                {
                    // Object流处理 
                    int numBytesRead = 0;
                    int numBytesToRead = (int)obj.Metadata.ContentLength;
                    byte[] bytes = new byte[numBytesToRead];
                    FileStream fs = new FileStream("F:\\" + obj.Key, FileMode.Create);
                    // 将流写入本地文件保存 
                    while (numBytesToRead > 0)
                    {
                        int n = obj.Content.Read(bytes, numBytesRead, Math.Min(numBytesToRead, int.MaxValue));
                        if (n <= 0)
                        { break; }
                        fs.Write(bytes, numBytesRead, n);
                        numBytesRead += n;
                        numBytesToRead -= n;
                    }
                    fs.Close();
                    Response.Write("GetObject Done");
                }
                //异常处理 
                catch (OssException ex)
                {
                    Response.Write(string.Format("ErrorCode:{0}\n Message:{1}", ex.ErrorCode, ex.Message));
                }
            }
        }


在删除按钮的点击事件中,代码如下:

 protected void btnDel_Click(object sender, EventArgs e)
        {
            try
            {
                client.DeleteObject("jchubby", txtName.Text.Trim());
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }


运行测试页面

输入一个已存在的Object名

点击获取

保存完毕之后,在指定的文件夹下已存在该文件


点击删除,刷新Object列表

该文件已从OSS上删除



CopyObject--将指定的Object复制为另外一个Object

ObjectTest页面加入以下控件:

在复制按钮的点击事件中,代码如下:

protected void btnCopy_Click(object sender, EventArgs e)
        {
            CopyObjectResult res = client.CopyObject(new CopyObjectRequest("jchubby", txtOldName.Text.Trim(), "jchubby", txtNewName.Text.Trim()));
            if (res != null)
            {
                Response.Write("ok");
            }
        }

运行结果可自行测试



以上为OSS比较常见的操作,全部源码Demo下载:点击打开链接



相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
Dubbo 应用服务中间件 API
使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布
Apache Dubbo 3.3.3(即将发布)实现了与 OpenAPI 的深度集成,通过与 OpenAPI 的深度集成,用户能够体验到从文档生成到接口调试、测试和优化的全流程自动化支持。不论是减少手动工作量、提升开发效率,还是支持多语言和多环境,Dubbo 3.3.3 都展现了其对开发者体验的极大关注。结合强大的 Mock 数据生成和自动化测试能力,这一版本为开发者提供了极具竞争力的服务治理解决方案。如果你正在寻找高效、易用的微服务框架,Dubbo 3.3.3 将是你不容错过的选择。
1838 280
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
817 35
|
弹性计算 测试技术 持续交付
阿里云云效产品使用合集之如何进行自动化测试
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
579 0
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
500 0
|
机器学习/深度学习 自然语言处理 API
阿里云零门槛、轻松部署您的专属 DeepSeek模型体验测试
DeepSeek R1是基于Transformer架构的先进大规模深度学习模型,2025年1月20日发布并开源,遵循MIT License。它在自然语言处理等任务上表现出色,高效提取特征,缩短训练时间。阿里云推出的满血版方案解决了服务器压力问题,提供100万免费token,云端部署降低成本,用户可快速启动体验。虽然回答速度有待提升,但整体表现优异,备受关注。
777 8
|
关系型数据库 测试技术 分布式数据库
刷新世界纪录!阿里云PolarDB凭借创新的「三层解耦」架构刷新TPC-C基准测试世界纪录
刷新世界纪录!阿里云PolarDB凭借创新的「三层解耦」架构刷新TPC-C基准测试世界纪录
|
数据采集 自然语言处理 数据库
深入体验阿里云通义灵码:测试与实例展示
阿里云通义灵码是一款强大的代码生成工具,支持自然语言描述需求,快速生成高质量代码。它在测试、代码质量和用户体验方面表现出色,能够高效地生成 Python 和 Java 等语言的代码,助力开发者提升开发效率和代码质量。无论是新手还是资深开发者,都能从中受益匪浅。
深入体验阿里云通义灵码:测试与实例展示
|
传感器 安全 物联网
阿里云先知安全沙龙(北京站) ——车联网安全渗透测试思路分享
本文介绍了智能汽车的整车架构、协议栈结构、攻击点分析、渗透思路及案例分享。整车架构涵盖应用层、协议层和物理层,详细解析各层次功能模块和通信机制。攻击点包括Wi-Fi、USB、NFC等,展示车辆通信接口和系统组件的安全风险。渗透思路从信息收集到系统内部探索,利用固件漏洞控制车辆功能。案例展示了网段隔离不足导致的SSH访问和OTA日志审计漏洞,揭示了潜在的安全威胁。