C# Aliyun OSS 接口测试(二)-- 删除Bucket元素

191 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

C# Aliyun OSS 接口测试(一)-- 连接OSS并拉取Bucket列表 - 掘金 (juejin.cn)

C# Aliyun OSS 接口测试(二)-- 删除Bucket元素

4. 列举拉取到的Bucket列表

private void BucketOperation()
{
    Console.WriteLine("");
    Console.WriteLine("────────────── Buckets List ──────────────");
    int index = 0;
    foreach (var bucket in buckets)
    {
        CLog.Log(CLog.LogType.Log, string.Format("{0,-30}", bucket.Name));

        index++;
        if (index % 3 == 0)
        {
            CLog.Log(CLog.LogType.Log, "\r\n");
        }
        else
        {
            CLog.Log(CLog.LogType.Log, "\t");
        }
    }
    Console.WriteLine("");

    while (true)
    {
        Console.Write("Please enter the bucket's name to delete: ");
        m_Order = GetOrder();

        if (DoesBucketExist(buckets, m_Order))
        {
            m_BucketName = m_Order;
            Console.WriteLine("");
            break;
        }
        else
        {
            CLog.LogLine(CLog.LogType.Error, $"Not Found the bucket: {m_Order}");
        }
    }

    ObjectsOperation();
}
private bool DoesBucketExist(IEnumerable<Bucket> bucketList, string bucketName)
{
    foreach (var bucket in bucketList)
    {
        if (bucket.Name.Equals(bucketName))
        {
            return true;
        }
    }
    return false;
}

5. 判断要删除Bucket中的全部Object,还是某个Object

private void ObjectsOperation()
{
    while (true)
    {
        Console.Write("Delete All Objects ? (Y/N): ");
        m_Order = GetOrder();
        if (m_Order == "Y" || m_Order == "y")
        {
            DeleteAllOjbects();
            break;
        }
        else if (m_Order == "N" || m_Order == "n")
        {
            DeleteObject();
            break;
        }
        else
        {
            CLog.LogLine(CLog.LogType.Error, "Input Error!");
        }
    }
}

6. 删除Bucket中的全部Object

private void DeleteAllOjbects()
{
    Console.WriteLine("");
    Console.WriteLine("───────────── Delete Objects ──────────────");
    try
    {
        int delMaxKeys = 10;
        int delCount = 0;
        List<string> keys = new List<string>(delMaxKeys);
        while (true)
        {
            var listObjectsRequest = new ListObjectsRequest(m_BucketName)
            {
                // 默认100,最大返回1000条记录。
                MaxKeys = delMaxKeys,
            };
            var objectsList = m_OssClient.ListObjects(listObjectsRequest);

            keys.Clear();
            foreach (var summary in objectsList.ObjectSummaries)
            {
                keys.Add(summary.Key);
            }
            if (keys.Count == 0)
            {
                ClearConsoleLine(0);
                Console.WriteLine($"{delCount++} items have been deleted.");
                Console.WriteLine("All objects have been deleted.");
                break;
            }
            DeleteObjectsRequest request = new DeleteObjectsRequest(m_BucketName, keys, false);
            DeleteObjectsResult result = m_OssClient.DeleteObjects(request);

            DeleteObjectsResult.DeletedObject[] deletedKeys = result.Keys;
            int count = deletedKeys.Length;
            for (int i = 0; i < count; i++)
            {
                ClearConsoleLine(0);
                Console.Write($"{delCount++} items have been deleted. Deleting: {deletedKeys[i]}");
            }
        }
    }
    catch (Exception ex)
    {
        CLog.LogLine(CLog.LogType.Error, $"[ERROR]: {ex.Message}");
    }
}
private void ClearConsoleLine(int lineBefore)
{
    int currentLineCursor = Console.CursorTop;
    Console.SetCursorPosition(0, Console.CursorTop - lineBefore);
    Console.Write(new string(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, currentLineCursor - lineBefore);
}

7. 删除Bucket中的某个Object

private void DeleteObject()
{
    Console.WriteLine("");
    Console.WriteLine("───────────── Delete  Object ──────────────");

    string objectName = "";
    while (true)
    {
        Console.Write("Please enter the object's name to delete: ");
        m_Order = GetOrder();

        if (m_OssClient.DoesObjectExist(m_BucketName, m_Order))
        {
            objectName = m_Order;
            break;
        }
        else
        {
            CLog.LogLine(CLog.LogType.Error, "The object is not exist!");
        }
        m_OssClient.DeleteObject(m_BucketName, objectName);
        Console.WriteLine($"Deleted: {m_BucketName}/{objectName}");
    }
}

8. 运行测试

删除单个文件 在这里插入图片描述删除全部文件在这里插入图片描述

非常好用