public string AddAttachment(BufferFileMeta meta, Stream fileStream, FileBase.AllowedStates state) { int calculatedIndex = 0; string prefix = GetStringIdFromFilename(meta, true); var existingFiles = _database.FileStorage.Find(prefix); if (existingFiles.Count() > 0) { calculatedIndex = existingFiles.Min(q => int.Parse(q.Metadata["Id"].AsString ?? "0")); if (calculatedIndex > 0) { calculatedIndex = 0; } } calculatedIndex--; meta.SetId(calculatedIndex); string fileId = GetStringIdFromFilename(meta); //if (AttachmentExists(fileId)) _database.FileStorage.Delete(fileId); var uploadedFile = _database.FileStorage.Upload(fileId, meta.Filename, fileStream); _database.FileStorage.SetMetadata(uploadedFile.Id, GetMetadataFromAttachment(meta)); // string fileId = uploadedFile.Id; if (meta.AttachmentType == BufferFileMeta.AttachmentTypes.Attachment) { var collection = _database.GetCollection <FileAttachment>(); collection.Delete(fileId); // Delete old entry if exists collection.Insert(new FileAttachment { FileId = fileId, Filename = meta.Filename, List = meta.Listname, ReferenceId = meta.ParentId, State = state }); } else if (meta.AttachmentType == BufferFileMeta.AttachmentTypes.DocLib) { var collection = _database.GetCollection <FileDoclib>(); collection.Insert(new FileDoclib { FileId = fileId, Filename = meta.Filename, List = meta.Listname, ReferenceId = meta.ParentId, State = state, Folder = meta.Folder }); } return(fileId); }
public BufferFileMeta GetMetadataFromAttachment(LiteDB.BsonDocument doc) { var meta = new BufferFileMeta(); foreach (var property in typeof(BufferFileMeta).GetProperties()) { if (property.CanWrite && doc.ContainsKey(property.Name)) { var converter = TypeDescriptor.GetConverter(property.PropertyType); property.SetValue(meta, converter.ConvertFromString(doc[property.Name])); } } meta.SetId(int.Parse(doc[nameof(BufferFileMeta.Id)].AsString)); return(meta); }