示例#1
0
        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);
        }
示例#2
0
        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);
        }