当前位置: 首页 > java >正文

ASP.NET Core上传文件到minio

1.用到的依赖包—Minio

使用命令添加依赖,或者使用Nugui搜索minio依赖后添加到指定项目中

dotnet add package Minio --version 6.0.5

我这里是使用了JetBrains Rider,这工具其实也挺好使的,尤其对于我本身写java的人来说,很容易习惯,无非就是占用内存比起vs code要高不少。

如果是用vs code,需要先安装nug包管理插件——NuGet Package Manager GUI

使用command+shift+p(macOS)或者ctrl+shift+p(Windows),输入nug,然后搜索即可

2.相关代码

    [HttpPost("upload/single")][ProducesResponseType(typeof(CommonResult<FileUploadResp>), StatusCodes.Status200OK)][ProducesResponseType(StatusCodes.Status200OK)]public async Task<IActionResult> PostUploadFileMinio(string? bucket, IFormFile file){if (file is not { Length: > 0 }){return Ok(CommonResult<string>.Failed(500, "文件不能为空"));}_service._logger.LogDebug("上传的文件信息==={file}", JsonHelper.Serialize(file));var response = await _service.UploadFile(bucket, file);return Ok(CommonResult<FileUploadResp>.Success("上传成功", response));}
public async Task<FileUploadResp> 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, "文件上传失败,稍后重试");}}

3.上传测试

在swagger中调用上传接口

控制台日志

浏览器访问minio图片

http://www.xdnf.cn/news/19807.html

相关文章:

  • 【leetcode】236. 二叉树的最近公共祖先
  • 利用Base64传输二进制文件并执行的方法(适合没有ssh ftp等传输工具的嵌入式离线场景)
  • 研发文档版本混乱的根本原因是什么,怎么办
  • ELK 统一日志分析系统部署与实践指南(上)
  • 撤销修改 情况⼀:对于⼯作区的代码,还没有 add
  • 餐饮、跑腿、零售多场景下的同城外卖系统源码扩展方案
  • 图片移到根目录
  • Spring Boot + Spring MVC 项目结构
  • ARM汇编记忆
  • C# 简述委托,Func与Action委托。 他们之前有什么区别?
  • 告别手动复制粘贴:C# 实现 Excel 与 TXT 文本文件高效互转
  • 搭建分布式Hadoop集群[2025] 实战笔记
  • SQL分类详解:掌握DQL、DML、DDL等数据库语言类型
  • p049基于Flask的医疗预约与诊断系统
  • 删除⽂件之git
  • 避免侵权!这6个可免费下载字体网站能放心商用
  • 大模型推理加速深度对比:vLLM vs TensorRT-LLM vs ONNX Runtime,谁是生产环境最优解?
  • hot100——第十周
  • linux(cut,sort,uniq ,tr,sed,awk)命令介绍
  • 两个矩形之间的距离 python
  • 互联网大厂Java面试三大回合全解析:从语言特性到性能安全
  • Python数据分析与处理(一):读取不同格式.mat文件的具体方法【超详细】
  • 图解设计模式
  • python - ( js )object对象、json对象、字符串对象的相关方法、数组对象的相关方法、BOM对象、BOM模型中 Navigator 对象
  • Ubuntu中配置JMmeter工具
  • Java 类加载机制(ClassLoader)的必会知识点汇总
  • 当合规成为主旋律,PSP 如何推动链上消费市场迈向新蓝海?
  • MidJourney AI绘图工具测评:支持Discord指令生成图片,含图生图与非商业版权使用功能
  • 零样本视觉模型(DINOv3)
  • 云手机发展:未来的场景变化