C#阿里云OSS——存储


阿里云OSS是什么?

OSS是对象存储,简单理解就是一个云盘。可以把文件或者对象存储至OSS,用户下载时走OSS的服务,更快体验更好。

使用步骤

开通OSS和创建AccessKey

开通OSS存储不做过多赘述。以下注重讲一下创建AccessKey

首先先去阿里云RAM访问控制台,点击创建账户

在这里插入图片描述
记得勾选编程访问
在这里插入图片描述

创建完成后仅显示一次AccessKey的信息,需要妥善保存这些信息
描述在哪里

如遇报错
1、Create bucket failed, Put bucket request is not resource owner.创建存储失败,当前账户没有权限。
解决方案:检查RAM控制台改账号有没有管理OSS的权限,如果没有添加一下就可以了。
在这里插入图片描述

项目应用

安装Aliyun.OSS.SDK.NetCore包

编写OSS帮助类,封装SDK提供的方法

以下是我根据阿里云官方文档写的一个简易的帮助类,可以在此接触上进行扩展。

AliyunOSSHelper.cs 帮助类

代码运行截图:
在这里插入图片描述
阿里云OSS后台截图
在这里插入图片描述

using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Org.BouncyCastle.Math.EC.ECCurve;

namespace WanAdmin.Core.Utils
{
    /// <summary>
    /// OSS地域对应的Endpoint
    /// </summary>
    public static class Endpoint
    {
        /// <summary>
        /// 华东1(杭州)
        /// </summary>
        const string HangZhou = "oss-cn-hangzhou.aliyuncs.com";
        /// <summary>
        /// 华东2(上海)
        /// </summary>
        const string ShangHai = "oss-cn-shanghai.aliyuncs.com";
        /// <summary>
        /// 华北1(青岛)
        /// </summary>
        const string QingDao = "oss-cn-qingdao.aliyuncs.com";
        /// <summary>
        /// 华北2(北京)
        /// </summary>
        public const string BeiJing = "oss-cn-beijing.aliyuncs.com";
    }
    public class AliyunOSSHelper
    {
        static string accessKeyId = "你的accessKeyId ";
        static string accessKeySecret = "你的accessKeySecret";
        static string endpoint = Endpoint.BeiJing;

        static OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret);


        /// <summary>
        /// 创建存储空间
        /// </summary>
        /// <param name="bucketName">存储空间名称</param>
        /// <returns></returns>
        public static bool CreateBucket(string bucketName)
        {
            try
            {
                // 创建存储空间。
                var bucket = client.CreateBucket(bucketName);
                Console.WriteLine($"创建存储空间《{bucketName}》成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Create bucket failed, {ex.Message}");
                return false;
            }
            return true;
        }

        /// <summary>
        /// 存储一个字符串
        /// </summary>
        /// <param name="bucketName">存储空间名称</param>
        /// <param name="key">Key</param>
        /// <param name="objectContent">字符内容</param>
        /// <returns></returns>
        public static bool PutString(string bucketName, string key, string objectContent)
        {
            try
            {
                byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
                MemoryStream requestContent = new MemoryStream(binaryData);
                // 上传文件。
                client.PutObject(bucketName, key, requestContent);
                Console.WriteLine($"存储字符串《{ objectContent }》成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"存储字符串有误, { ex.Message}");
                return false;
            }
            return true;
        }


        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="bucketName">存储空间名称</param>
        /// <param name="fileToUpload">文件路径</param>
        /// <param name="key">Key</param>
        /// <returns></returns>
        public static bool PutObject(string bucketName, string fileToUpload, string key = "")
        {
            if (string.IsNullOrEmpty(key))
            {
                key = Path.GetFileName(fileToUpload);
            }
            try
            {
                // 上传文件。
                var result = client.PutObject(bucketName, key, fileToUpload);
                Console.WriteLine($"上传文件《{ key }》成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"上传文件有误  { ex.Message}");
                return false;
            }
            return true;
        }

        /// <summary>
        /// 文件是否存在
        /// </summary>
        /// <param name="bucketName"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool ExistsObject(string bucketName, string key)
        {
            try
            {
                // 判断文件是否存在。
                var exist = client.DoesObjectExist(bucketName, key);
                Console.WriteLine("Object exist ? " + exist);
                return true;
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
            return false;
        }


        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="bucketName"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool DeleteObject(string bucketName, string key)
        {
            try
            {
                // 删除文件。
                client.DeleteObject(bucketName, key);
                Console.WriteLine($"删除文件《{key}》成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"删除文件有误{ex.Message}");
                return false;
            }
            return true;

        }




        /// <summary>
        /// 获取文件列表
        /// </summary>
        /// <param name="bucketName">存储空间名称</param>
        /// <returns></returns>
        public static List<OssObjectSummary> ListObjects(string bucketName)
        {
            var objectsList = new List<OssObjectSummary>();
            try
            {
                ObjectListing result = null;
                string nextMarker = string.Empty;
                do
                {
                    var listObjectsRequest = new ListObjectsRequest(bucketName)
                    {
                        Marker = nextMarker,
                    };
                    // 列举文件。
                    result = client.ListObjects(listObjectsRequest);
                    foreach (var summary in result.ObjectSummaries)
                    {
                        objectsList.Add(summary);
                        Console.WriteLine(summary.Key);
                    }
                    nextMarker = result.NextMarker;
                } while (result.IsTruncated);

            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
            return objectsList;
        }


    }
}

资料文献:
[1]: https://help.aliyun.com/document_detail/32086.html
[2]: https://github.com/aliyun/aliyun-oss-csharp-sdk

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值