C# minio怎么获取上传文件进度

主要方法是用MinioClient中的日志记录方法,从日志里面找到有关上传的进度,minio是将大文件分割为每5MB的小文件上传的

//
// 摘要:
// Sets HTTP tracing On.Writes output to Console
public void SetTraceOn(IRequestLogger logger = null);

//fileSizeKB 总文件字节数
//计算minio分割的总文件块、minio将大文件切割为每5MB一个小文件上传
int total_minio_file_count = (int)Math.Ceiling(fileSizeKB / 5120);

var client = new MinioClient(
                                        endpoint: "192.168.1.117:9000",
                                        accessKey: "minio",
                                        secretKey: "minio123456"
                  );
client.SetTraceOn(new MinioRequestLog()
{
	//日志记录
	BackLogFunc = fileNo =>
	{
		decimal process = Math.Round((decimal)fileNo * 100 / total_minio_file_count, 2);
		string videoProcess = $"后台上传进度:{process}%";
		LogHelpter.AddLog(videoProcess);
		
		//signalR推送到前端显示进度值
		hubContext.Clients.User(loginUserId).SendAsync("ReceiveMessage", loginUserId, process);
	}
});

await client.PutObjectAsync(bucketName, fileDbNew, fileSavePath);
stopwatch.Stop();
LogHelpter.AddLog($"上传成功,耗时{stopwatch.ElapsedMilliseconds}毫秒,文件" + fileDbNew + ",文件id=" + fileId);

//上传成功后,删除本地文件
System.IO.File.Delete(fileSavePath);

日志记录

using Minio;
using Minio.DataModel.Tracing;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;


namespace WebNetCore5_Img_Storage.Model.Tool
{
    /// <summary>
    /// mino请求日志记录
    /// </summary>
    /// <remarks>
    /// </remarks>
    public class MinioRequestLog : IRequestLogger
    {
        /// <summary>
        /// 进度值回调处理
        /// </summary>
        public Action<int> BackLogFunc { get; set; }

        /// <summary>
        /// 日志回写方法
        /// </summary>
        /// <param name="requestToLog"></param>
        /// <param name="responseToLog"></param>
        /// <param name="durationMs"></param>
        public void LogRequest(RequestToLog requestToLog, ResponseToLog responseToLog, double durationMs)
        {
            if (responseToLog.statusCode == HttpStatusCode.OK)
            {
                foreach (var header in requestToLog.parameters)
                {
                    if (header.value == null) continue;
                    //LogHelpter.AddLog($"minio上传{header.name}:{header.value.ToString()}");
                    //partNumber 文件块序号,从1开始
                    if (header.name.Equals("partNumber"))
                    {
                        int partNumber = Convert.ToInt32(header.value);
                        BackLogFunc(partNumber);
                    }
                }

            }
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王焜棟琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值