完了吃胖了 發表於 2025-9-3 08:50:02

ASP.NET Core上传文件到minio的实现示例

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1.用到的依赖包&mdash;Minio</a></li><li><a href="#_label1">2.相关代码</a></li><li><a href="#_label2">3.上传测试</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1.用到的依赖包&mdash;Minio</h2>
<p>使用命令添加依赖,或者使用Nugui搜索minio依赖后添加到指定项目中</p>
<div class="jb51code"><pre class="brush:csharp;">dotnet add package Minio --version 6.0.5</pre></div>
<p>我这里是使用了JetBrains Rider,这工具其实也挺好使的,尤其对于我本身写java的人来说,很容易习惯,无非就是占用内存比起vs code要高不少。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460022.png" /></p>
<p>如果是用vs code,需要先安装nug包管理插件&mdash;&mdash;NuGet Package Manager GUI</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460073.png" /></p>
<p>使用command+shift+p(macOS)或者ctrl+shift+p(Windows),输入nug,然后搜索即可</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460041.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460081.png" /></p>
<p class="maodian"><a name="_label1"></a></p><h2>2.相关代码</h2>
<div class="jb51code"><pre class="brush:csharp;">   
   
   
    public async Task&lt;IActionResult&gt; PostUploadFileMinio(string? bucket, IFormFile file)
    {
      if (file is not { Length: &gt; 0 })
      {
            return Ok(CommonResult&lt;string&gt;.Failed(500, "文件不能为空"));
      }

      _service._logger.LogDebug("上传的文件信息==={file}", JsonHelper.Serialize(file));
      var response = await _service.UploadFile(bucket, file);
      return Ok(CommonResult&lt;FileUploadResp&gt;.Success("上传成功", response));
    }</pre></div>
<div class="jb51code"><pre class="brush:csharp;">public async Task&lt;FileUploadResp&gt; UploadFile(string? bucket, IFormFile file)
    {
      bucket ??= "test";
      try
      {
            var safeFileName = Path.GetFileName(file.FileName);
            safeFileName = GenerateUniqueFileName(safeFileName);

            await using var stream = file.OpenReadStream();
            await _minioClient.PutObjectAsync(new PutObjectArgs()
                .WithBucket(bucket)
                .WithObject(safeFileName)
                .WithStreamData(stream)
                .WithObjectSize(file.Length)
                .WithContentType(file.ContentType)
            );

            var endpoint = _minioClient.Config.Endpoint;
            if (!Uri.TryCreate(endpoint, UriKind.Absolute, out var uri))
            {
                _logger.LogError("minio的endpoint无效==={uri}", uri);
                throw new ArgumentException("minio端点无效");
            }

            var fileUrl = $"{endpoint}/{bucket}/{safeFileName}";
            var resp = new FileUploadResp(safeFileName, fileUrl);
            _logger.LogDebug("文件上传成功==={resp}", JsonHelper.Serialize(resp));
            return resp;
      }
      catch (Exception ex)
      {
            _logger.LogError(ex, "minio文件上传异常");
            throw new Model.CusException.MinioException(500, "文件上传失败,稍后重试");
      }
    }</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>3.上传测试</h2>
<p>在swagger中调用上传接口</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460061.png" /></p>
<p>控制台日志</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460079.png" /></p>
<p>浏览器访问minio图片</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090308460028.png" /></p>
頁: [1]
查看完整版本: ASP.NET Core上传文件到minio的实现示例