예제 #1
0
        // 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);
        }