public async Task <ServiceResult <BinaryFile> > SaveFile(IFormFile file)
        {
            if (file.Length > 1 << 20)
            {
                return(Fail <BinaryFile>(null, "文件过大"));
            }
            var binaryFile = new BinaryFile {
                Bytes       = new byte[file.Length],
                ContentType = file.ContentType,
                FileName    = file.FileName
            };

            using (var fileStream = file.OpenReadStream())
            {
                await fileStream.ReadAsync(binaryFile.Bytes, 0, Convert.ToInt32(file.Length));
            }
            binaryFile.MD5 = MD5Service.MD5Generate(binaryFile.Bytes);
            var existfiles = Context.BinaryFiles.Where(f => f.MD5.StartsWith(binaryFile.MD5));

            if (existfiles.Any())
            {
                foreach (var existfile in existfiles)
                {
                    // compare the actual bytes...
                    if (!BytesCompare(existfile.Bytes, binaryFile.Bytes))
                    {
                        // unluckily, we had to add time suffix...
                        binaryFile.MD5 += DateTime.Now.ToString();
                        Logger.Log(LogLevel.Debug, "Congratulations! We found file md5 crash in two different files!");
                    }
                    else
                    {
                        return(Exist(existfile, "相同文件已存在"));
                    }
                }
            }
            Context.BinaryFiles.Add(binaryFile);
            await Context.SaveChangesAsync();

            return(Success(binaryFile, "文件保存成功"));
        }
 public DbFileService(XueLeMeContext xueLeMeContext, MD5Service mD5Service, ILogger <DbFileService> logger)
 {
     Context    = xueLeMeContext;
     MD5Service = mD5Service;
     Logger     = logger;
 }
 public MD5SecurityService(MD5Service mD5Service)
 {
     MD5Service = mD5Service;
 }