Exemplo n.º 1
0
        static void Main(string[] args)
        {
            string s = @"Text:file.txt(6B);Some string content
Image:img.bmp(19MB);1920x1080
Text:data.txt(12B);Another string
Text:data1.txt(7B);Yet another string
Movie:logan.2017.mkv(19GB);1920x1080;2h12m";

            var arr = s.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine();

            List <File> files = new List <File>();

            foreach (var item in arr)
            {
                //Console.WriteLine("->" + item);
                if (item.StartsWith("Image:"))
                {
                    File f = new FileImages();
                    f.Pars(item);
                    files.Add(f);
                }

                if (item.StartsWith("Text:"))
                {
                    File f = new FileTxt();
                    f.Pars(item);
                    files.Add(f);
                }

                if (item.StartsWith("Movie:"))
                {
                    File f = new FileMovies();
                    f.Pars(item);
                    files.Add(f);
                }
            }
            Console.WriteLine("___________");
            foreach (var file in files)
            {
                Console.WriteLine(file);
            }
        }
Exemplo n.º 2
0
        public async Task <IActionResult> UploadFiles()
        {
            if (!IsMultipartContentType(Request.ContentType))
            {
                return(new UnsupportedMediaTypeResult());
            }

            Log.Information($"POSTing files...");

            var boundary = HeaderUtilities.RemoveQuotes(MediaTypeHeaderValue.Parse(Request.ContentType).Boundary);
            var reader   = new MultipartReader(boundary.Value, Request.Body);

            MultipartSection section;

            IList <Image> imagesRequest = null;
            var           result        = new List <FileImages>();

            while ((section = await reader.ReadNextSectionAsync()) != null)
            {
                var contentDisposition = section.GetContentDispositionHeader();
                if (contentDisposition.IsFormDisposition() && imagesRequest is null)
                {
                    var    formSection = section.AsFormDataSection();
                    string formValue   = await formSection.GetValueAsync();

                    imagesRequest = JsonConvert.DeserializeObject <IList <Image> >(formValue, new JsonSerializerSettings
                    {
                        Error = delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
                        {
                            args.ErrorContext.Handled = true;
                        }
                    });
                }
                if (contentDisposition.IsFileDisposition())
                {
                    var fileSection = section.AsFileSection();
                    if (string.IsNullOrEmpty(fileSection.FileName))
                    {
                        Log.Information($"Empty file section");
                        continue;
                    }
                    Log.Information($"Saving file {fileSection.FileName}");

                    var blobId = await _blobStorage.AddFileAsync(Path.GetFileName(fileSection.FileName), fileSection.FileStream, fileSection.Section.ContentType, _bucket);

                    if (imagesRequest is null || !imagesRequest.Any())
                    {
                        imagesRequest = new Image[]
                        {
                            new Image
                            {
                                Width  = int.Parse(_configuration["DefaultImage:Width"]),
                                Format = _configuration["DefaultImage:Format"],
                                Height = int.Parse(_configuration["DefaultImage:Height"])
                            }
                        };
                    }

                    foreach (var requestedImage in imagesRequest)
                    {
                        requestedImage.Id = NewId.Next().ToGuid();

                        if (requestedImage.Width <= 0)
                        {
                            requestedImage.Width = int.Parse(_configuration["DefaultImage:Width"]);
                        }

                        if (requestedImage.Height <= 0)
                        {
                            requestedImage.Height = int.Parse(_configuration["DefaultImage:Height"]);
                        }
                    }

                    var fileImages = new FileImages
                    {
                        Id     = blobId,
                        Images = imagesRequest,
                        Bucket = _bucket
                    };

                    //await _imagesMetaCollection.InsertOneAsync(fileImages);

                    foreach (var requestedImage in imagesRequest)
                    {
                        await _bus.Publish <GenerateImage>(new
                        {
                            Id     = requestedImage.Id,
                            Bucket = _bucket,
                            BlobId = blobId,
                            Image  = requestedImage,
                            UserId = new Guid(_bucket)
                        });
                    }

                    result.Add(fileImages);
                }
            }

            return(Ok(result));
        }