如何使用C#在MinIO中创建空文件夹/对象
在MinIO .NET客户端创建空文件夹的正确实现
MinIO本身没有真正的文件夹概念,是通过创建以/结尾的空对象来模拟文件夹结构。你之前的代码报错是因为.NET客户端对空对象的参数处理和Java端略有差异,以下是可行的实现方式:
方法一:使用简化的PutObjectAsync重载
public async Task CreateFolderAsync(string path, string folderName) { // 拼接完整的文件夹路径(必须以/结尾) var folderObjectPath = $"{path.TrimEnd('/')}/{folderName}/"; // 直接调用重载方法,传入空流和大小0 await _minioClient.PutObjectAsync( bucketName: _configuration["MinIO:Bucket"], objectName: folderObjectPath, data: new MemoryStream(), size: 0 ).ConfigureAwait(false); }
方法二:使用PutObjectArgs构建器(修正你的原代码)
如果坚持使用PutObjectArgs,需要确保流和大小参数匹配,还可以添加类型标识明确标记为文件夹:
public async Task CreateFolderAsync(string path, string folderName) { var args = new PutObjectArgs() .WithBucket(_configuration["MinIO:Bucket"]) .WithObject($"{path.TrimEnd('/')}/{folderName}/") .WithStreamData(new MemoryStream()) .WithObjectSize(0) .WithContentType("application/x-directory"); // 可选,明确标识为文件夹类型 await _minioClient.PutObjectAsync(args).ConfigureAwait(false); }
关键说明
- 必须保证对象路径以
/结尾,MinIO才会将其识别为文件夹展示 - .NET客户端要求空对象必须明确指定
size=0,而Java客户端允许用-1让系统自动推断,这是两者的核心差异
内容的提问来源于stack exchange,提问作者x1m
相关产品推荐
相关产品推荐

