本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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. 运行测试
删除单个文件
删除全部文件