.netcore操作minio实现上传文件
/// <summary>
/// 上传文件到Minio中
/// </summary>
/// <param name="fileType"></param>
/// <param name="systemName"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<List<object>> UpLoadFileToMinio([FromForm] int fileType, [FromForm] string systemName = "")
{
string bucketName = string.Empty;
string objectName = string.Empty;
var files = HttpContext.Request.Form.Files;
if (files.Where(f => f.Length > 10485760).Count() > 0)
{
throw new UserFriendlyException("单个文件大小不能超过10M");
}
List<object> list = new List<object>();
foreach (var formFile in files)
{
if (fileType == (int)ImgTypeEnum.ImgLogo)
{
bucketName = ImgTypeEnum.ImgLogo.ToString().ToLower();
objectName = $"{systemName.MDString().ToLower()}{Path.GetExtension(formFile.FileName)}";
}
else
{
bucketName = ImgTypeEnum.ImgWuLiu.ToString().ToLower();
objectName = $"{DateTime.Now.ToString("yyyyMMdd")}/{SnowFlakeNew.NewId}{Path.GetExtension(formFile.FileName)}";
}
var bucketExistsArgs = new BucketExistsArgs().WithBucket(bucketName);
if (!await _minioClient.BucketExistsAsync(bucketExistsArgs))
{
var makeBucketArgs = new MakeBucketArgs()
.WithBucket(bucketName)
.WithLocation("us-east-1"); // Set the location as per your requirement
await _minioClient.MakeBucketAsync(makeBucketArgs);
await SetBucketPolicyAsync(bucketName);
}
var putObjectArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithStreamData(formFile.OpenReadStream())
.WithObjectSize(formFile.Length)
.WithContentType(formFile.ContentType);
var res = await _minioClient.PutObjectAsync(putObjectArgs);
var fileUrl = $"http://{_configuration["MinIO:Endpoint"]}/{bucketName}/{objectName}";
list.Add(new { src = fileUrl, title = objectName, oriFileName = formFile.FileName });
}
return list;
}
private async Task SetBucketPolicyAsync(string bucketName)
{
// 设置桶策略为公开读取 (重要步骤)
string bucketPolicy = $@"{{
""Version"": ""2012-10-17"",
""Statement"": [
{{
""Sid"": ""PublicReadGetObject"",
""Effect"": ""Allow"",
""Principal"": {{ ""AWS"": ""*"" }},
""Action"": [ ""s3:GetObject"" ],
""Resource"": [ ""arn:aws:s3:::{bucketName}/*"" ]
}}
]
}}";
var st = new SetPolicyArgs().WithBucket(bucketName).WithPolicy(bucketPolicy);
await _minioClient.SetPolicyAsync(st);
}
更多推荐




所有评论(0)