本文介紹如何列舉指定儲存空間下(Bucket)的所有檔案(Object)、指定個數的檔案、指定首碼的檔案等。
注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見訪問網域名稱和資料中心。
本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見初始化。
要列舉檔案,您必須有
oss:ListObjects
許可權。具體操作,請參見為RAM使用者授權自訂的權限原則。
簡單列舉檔案
以下代碼用於簡單列舉指定Bucket下的100個檔案。
using Aliyun.OSS;
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
var listObjectsRequest = new ListObjectsRequest(bucketName);
// 簡單列舉Bucket中的檔案,預設返回100條記錄。
var result = client.ListObjects(listObjectsRequest);
Console.WriteLine("List objects succeeded");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("File name:{0}", summary.Key);
}
}
catch (Exception ex)
{
Console.WriteLine("List objects failed. {0}", ex.Message);
}
列舉指定個數的檔案
以下代碼用於列舉指定個數的檔案。
using Aliyun.OSS;
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
// 通過MaxKeys指定列舉檔案的最大個數為200。 MaxKeys預設值為100,最大值為1000。
MaxKeys = 200,
};
var result = client.ListObjects(listObjectsRequest);
Console.WriteLine("List objects succeeded");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
}
}
catch (Exception ex)
{
Console.WriteLine("List objects failed, {0}", ex.Message);
}
列舉指定首碼的檔案
以下代碼用於列舉包含指定首碼(prefix)的檔案。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 列舉包含指定首碼test的檔案。預設列舉100個檔案。
var prefix = "test";
// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
var keys = new List<string>();
ObjectListing result = null;
string nextMarker = string.Empty;
do
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
Marker = nextMarker,
MaxKeys = 100,
Prefix = prefix,
};
result = client.ListObjects(listObjectsRequest);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
keys.Add(summary.Key);
}
nextMarker = result.NextMarker;
} while (result.IsTruncated);
Console.WriteLine("List objects of bucket:{0} succeeded ", bucketName);
}
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);
}
列舉指定marker之後的檔案
參數marker代表檔案名稱。以下代碼用於列舉指定marker之後的檔案。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 設定marker,例如exampleobject.txt。
var marker = "exampleobject.txt";
// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
var keys = new List<string>();
ObjectListing result = null;
string nextMarker = marker;
do
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
// 您可以通過修改MaxKeys參數增大返迴文件數量,也可以通過Marker參數分次讀取。
{
Marker = nextMarker,
MaxKeys = 100,
};
result = client.ListObjects(listObjectsRequest);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
keys.Add(summary.Key);
}
nextMarker = result.NextMarker;
// 如果IsTruncated為true, 則NextMarker將作為下次讀取檔案的起點。
} while (result.IsTruncated);
Console.WriteLine("List objects of bucket:{0} succeeded ", bucketName);
}
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);
}
列舉所有檔案
以下代碼用於列舉指定Bucket下的所有檔案。
using Aliyun.OSS;
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 初始化OssClient。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
// 列舉所有檔案。
public void ListObject(string bucketName)
{
try
{
ObjectListing result = null;
string nextMarker = string.Empty;
do
{
// 每頁列舉的檔案個數通過MaxKeys指定,超出指定數量的檔案將分頁顯示。
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
Marker = nextMarker,
MaxKeys = 100
};
result = client.ListObjects(listObjectsRequest);
Console.WriteLine("File:");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("Name:{0}", summary.Key);
}
nextMarker = result.NextMarker;
} while (result.IsTruncated);
}
catch (Exception ex)
{
Console.WriteLine("List object failed. {0}", ex.Message);
}
}
通過非同步方式列舉檔案
以下代碼用於非同步方式列舉檔案:
using System;
using System.IO;
using System.Threading;
using Aliyun.OSS;
namespace AsyncListObjects
{
class Program
{
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
static string endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
static string bucketName = "yourBucketName";
static AutoResetEvent _event = new AutoResetEvent(false);
// 建立OssClient執行個體。
static OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret);
static void Main(string[] args)
{
Program.AsyncListObjects();
Console.ReadKey();
}
public static void AsyncListObjects()
{
try
{
var listObjectsRequest = new ListObjectsRequest(bucketName);
client.BeginListObjects(listObjectsRequest, ListObjectCallback, null);
_event.WaitOne();
}
catch (Exception ex)
{
Console.WriteLine("Async list objects failed. {0}", ex.Message);
}
}
// 通過ListObjectCallback方法非同步呼叫結束後執行回調,如果使用非同步類型的介面,都需要實作類別似介面。
private static void ListObjectCallback(IAsyncResult ar)
{
try
{
var result = client.EndListObjects(ar);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("檔案名稱: {0}", summary.Key);
}
_event.Set();
Console.WriteLine("Async list objects succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Async list objects failed. {0}", ex.Message);
}
}
}
}
相關文檔
關於以同步方式列舉檔案的完整範例程式碼,請參見GitHub樣本。
關於以非同步方式列舉檔案的完整範例程式碼,請參見GitHub樣本。
關於列舉檔案的API介面說明,請參見GetBucket (ListObjects)。