C# Google Cloud Storage 获取文件夹中的 ListObjects
C# Google Cloud Storage Get ListObjects in Folders
我将所有申请信息存储在 Google 云存储中。我创建了一个存储桶,在这个存储桶中我有文件夹。使用该代码,我可以获得所有文件夹的列表。
public static IList<uFolder> ListFolders(string bucketName)
{
if (storageService == null)
{
CreateAuthorizedClient();
}
Objects objects = storageService.Objects.List(bucketName).Execute();
if (objects.Items != null)
{
return objects.Items.
Where(x => x.ContentType == "application/x-www-form-urlencoded;charset=UTF-8").
Select(x => new uFolder(x.Name)).ToList();
}
return null;
}
但实际上这段代码,将我所有的文件和文件夹都放入我的存储桶中。所以我需要提取它们。我的第一个问题,这种方法有捷径吗?
我的另一个也是最重要的问题是,如何获取特定文件夹中的所有文件?例如;
我的存储桶名称是 MyBucket,我想从 "MyBucket/2/" 获取所有文件。我怎样才能做到这一点?这是检查文件的媒体链接或自链接的唯一方法吗?
感谢大家的回答。祝你有个美好的一天,好好工作...
我想你想要的是将列表请求的 Delimiter 属性 设置为 /
。这将 return 在层次结构的顶层分隔结果。
如果想在您的 Google 云存储中获取顶级文件夹,每个人都可以使用;
ObjectsResource.ListRequest request = storageService.Objects.List(CurrentBucket);
request.Delimiter = "/";
Google.Apis.Storage.v1.Data.Objects response = request.Execute();
if (response.Prefixes != null)
{
return response.Prefixes.ToList();
}
如果想获取特定文件夹内的文件夹;
ObjectsResource.ListRequest request = storageService.Objects.List(CurrentBucket);
request.Delimiter = "/";
request.Prefix = delimiter; //delimiter is any sub-folder name. E.g : "2010/"
Google.Apis.Storage.v1.Data.Objects response = request.Execute();
if (response.Prefixes != null)
{
return response.Prefixes.ToList();
}
注意:我正在返回到达文件夹的前缀。
这是针对你的问题(你能告诉我任何 C# 示例吗?我在互联网上找不到任何示例 – Umut Çömlekçioğlu)。请检查 C# 中的代码以上传对象或获取对象列表 -
using Google.Apis.Auth.OAuth2;
using Google.Cloud.Storage.V1;
string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Test.csv");
File.WriteAllText(file, "test");
GoogleCredential credential = null;
BucketConnector bucketConnector = new BucketConnector();
credential = bucketConnector.ConnectStream();
var storageClient = StorageClient.Create(credential);
//Upload object in google bucket
string folderPath = ConfigurationParameters.FOLDER_NAME_IN_BUCKET;
using (FileStream file = File.OpenRead(localPath))
{
objectName = folderPath + Path.GetFileName(localPath);
storage.UploadObject(bucketName, objectName, null, file);
}
// get list of object from google bucket and specific folder
ListObjectsOptions listObjectsOptions = new ListObjectsOptions();
listObjectsOptions.Delimiter = "/";
foreach (var obj in storageClient.ListObjects(ConfigurationParameters.BUCKET_NAME ,ConfigurationParameters.FOLDER_NAME_IN_BUCKET , listObjectsOptions))
{
string obj_name = obj.Name;
}
我将所有申请信息存储在 Google 云存储中。我创建了一个存储桶,在这个存储桶中我有文件夹。使用该代码,我可以获得所有文件夹的列表。
public static IList<uFolder> ListFolders(string bucketName)
{
if (storageService == null)
{
CreateAuthorizedClient();
}
Objects objects = storageService.Objects.List(bucketName).Execute();
if (objects.Items != null)
{
return objects.Items.
Where(x => x.ContentType == "application/x-www-form-urlencoded;charset=UTF-8").
Select(x => new uFolder(x.Name)).ToList();
}
return null;
}
但实际上这段代码,将我所有的文件和文件夹都放入我的存储桶中。所以我需要提取它们。我的第一个问题,这种方法有捷径吗?
我的另一个也是最重要的问题是,如何获取特定文件夹中的所有文件?例如; 我的存储桶名称是 MyBucket,我想从 "MyBucket/2/" 获取所有文件。我怎样才能做到这一点?这是检查文件的媒体链接或自链接的唯一方法吗?
感谢大家的回答。祝你有个美好的一天,好好工作...
我想你想要的是将列表请求的 Delimiter 属性 设置为 /
。这将 return 在层次结构的顶层分隔结果。
如果想在您的 Google 云存储中获取顶级文件夹,每个人都可以使用;
ObjectsResource.ListRequest request = storageService.Objects.List(CurrentBucket);
request.Delimiter = "/";
Google.Apis.Storage.v1.Data.Objects response = request.Execute();
if (response.Prefixes != null)
{
return response.Prefixes.ToList();
}
如果想获取特定文件夹内的文件夹;
ObjectsResource.ListRequest request = storageService.Objects.List(CurrentBucket);
request.Delimiter = "/";
request.Prefix = delimiter; //delimiter is any sub-folder name. E.g : "2010/"
Google.Apis.Storage.v1.Data.Objects response = request.Execute();
if (response.Prefixes != null)
{
return response.Prefixes.ToList();
}
注意:我正在返回到达文件夹的前缀。
这是针对你的问题(你能告诉我任何 C# 示例吗?我在互联网上找不到任何示例 – Umut Çömlekçioğlu)。请检查 C# 中的代码以上传对象或获取对象列表 -
using Google.Apis.Auth.OAuth2;
using Google.Cloud.Storage.V1;
string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Test.csv");
File.WriteAllText(file, "test");
GoogleCredential credential = null;
BucketConnector bucketConnector = new BucketConnector();
credential = bucketConnector.ConnectStream();
var storageClient = StorageClient.Create(credential);
//Upload object in google bucket
string folderPath = ConfigurationParameters.FOLDER_NAME_IN_BUCKET;
using (FileStream file = File.OpenRead(localPath))
{
objectName = folderPath + Path.GetFileName(localPath);
storage.UploadObject(bucketName, objectName, null, file);
}
// get list of object from google bucket and specific folder
ListObjectsOptions listObjectsOptions = new ListObjectsOptions();
listObjectsOptions.Delimiter = "/";
foreach (var obj in storageClient.ListObjects(ConfigurationParameters.BUCKET_NAME ,ConfigurationParameters.FOLDER_NAME_IN_BUCKET , listObjectsOptions))
{
string obj_name = obj.Name;
}