// Save Images and Thumbs! public async Task <List <string> > SaveImagesAsync(IEnumerable <IFormFile> BlogImage, bool savethumb = true) { string imgname = string.Empty; var imglist = new List <string>(); var tasks = new List <Task <bool> >(); var tmplist = new List <string>(); foreach (var file in BlogImage) { if (file != null) { var filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.ToString(); filename = filename.Trim('"');// FileName returns "fileName.ext"(with double quotes) imgname = GenerateImageName(filename); using (var stream = file.OpenReadStream()) { using var img = Image.Load(stream); img.Mutate(ctx => ctx.Resize(ImageUtil.GetMaxSize(img, 1200))); var ms = new MemoryStream(); img.SaveAsJpeg(ms); tasks.Add(_client.PutObjectAsync(imgname, ms).ContinueWith(t => { ms.Dispose(); return(t.Result); })); imglist.Add("//" + _client.BucketName + "/" + imgname); if (tmplist.Count == 0 && savethumb) { img.Mutate(ctx => ctx.Resize(ImageUtil.GetMaxSize(img, 150))); var nms = new MemoryStream(); img.SaveAsJpeg(nms); tasks.Add(_client.PutObjectAsync(imgname.Replace("/upload/", "/thumbs/"), nms) .ContinueWith(t => { nms.Dispose(); return(t.Result); })); } } tmplist.Add(imgname); } } await Task.WhenAll(tasks); foreach (var task in tasks) { if (!task.IsCompleted || !task.Result) { await _client.DeleteObjectsAsync(tmplist); imglist.RemoveRange(0, imglist.Count); break; } } return(imglist); }