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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 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搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
安全 Linux 虚拟化
|
5月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
3月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
67 1
|
4月前
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
546 1
|
4月前
|
网络协议 Windows
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
842 2
|
4月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
5月前
|
弹性计算 Prometheus Cloud Native
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
|
5月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之多个业务流程上传同名资源到同一个OSS(对象存储服务)URL,会产生什么问题
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

热门文章

最新文章