Beispiel #1
0
        public byte[] Zip(TemplateModel model)
        {
            using (var memoryStream = new MemoryStream())
            {
                using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
                {
                    var type       = model.GetType();
                    var properties = type.GetProperties();

                    foreach (var propery in properties)
                    {
                        var name = propery.Name;

                        if (name == "Chapter" || name == "TemplateId")
                        {
                            continue;
                        }

                        name = name.Contains("ImgUrl") ? $"{name}.jpg" : $"{name}.txt";

                        var entry = archive.CreateEntry(name);

                        if (!name.Contains("ImgUrl"))
                        {
                            using (var streamWriter = new StreamWriter(entry.Open(), Encoding.UTF8))
                            {
                                var obj = model.GetType()
                                          .GetProperty(propery.Name)
                                          .GetValue(model);

                                streamWriter.Write(obj);
                            }
                        }
                        else
                        {
                            using (var e = entry.Open())
                            {
                                ((IFormFile)model.GetType()
                                 .GetProperty(propery.Name)
                                 .GetValue(model))
                                .CopyTo(e);
                            }
                        }
                    }

                    return(memoryStream.GetBuffer());
                }
            }
        }