如何获取Google Cloud Storage存储桶文件夹内的文件内容?
解决Google Cloud Storage获取子文件夹内文件内容的问题
错误原因
Google Cloud Storage(GCS)没有真实的文件夹层级,所谓的“文件夹”只是对象名称的前缀部分。你之前的错误是把文件夹路径拼到了存储桶名称参数里,而DownloadObject的第一个参数仅接受纯存储桶名称,不能包含路径,因此抛出无效桶名的异常。
正确实现代码
将文件的完整路径(包含前缀,即Templates/Email/DefaultTemplate.html)作为DownloadObject的第二个参数,第一个参数保持为纯存储桶名称notification-email-layout即可。同时优化流读取逻辑,使用using语句自动释放资源:
var storage = StorageClient.Create(); using var stream = new MemoryStream(); // 第一个参数是存储桶名,第二个参数是文件的完整对象路径 storage.DownloadObject("notification-email-layout", "Templates/Email/DefaultTemplate.html", stream); // 将流指针重置到起始位置,读取内容 stream.Position = 0; using var sr = new StreamReader(stream); string txt = sr.ReadToEnd(); return Content(txt, "text/html");
补充说明
如果需要遍历某个“文件夹”下的所有文件,可以使用ListObjects方法,指定前缀参数(比如"Templates/Email/")来过滤对象:
var storage = StorageClient.Create(); var objects = storage.ListObjects("notification-email-layout", "Templates/Email/"); foreach (var obj in objects) { // 处理每个文件对象,比如下载 using var stream = new MemoryStream(); storage.DownloadObject(obj.Bucket, obj.Name, stream); // ...后续读取逻辑 }
内容的提问来源于stack exchange,提问作者GoGetSOme
相关产品推荐
相关产品推荐

