예제 #1
0
        private async Task <GridFSFileInfo> GetFileInfoAsync(string fileName)
        {
            var filter = Builders <GridFSFileInfo> .Filter.Eq(x => x.Filename, fileName);

            var fileInfo = await GridFsBucket.Find(filter).FirstOrDefaultAsync();

            return(fileInfo);
        }
예제 #2
0
 public async Task DeleteAsync(ObjectId id)
 {
     if (await AnyAsync(id))
     {
         await GridFsBucket.DeleteAsync(id);
     }
     cdnService.DeleteMongoFileData(id.ToString());
 }
예제 #3
0
        public async Task <string> UploadAsync(IFormFile file)
        {
            var options = new GridFSUploadOptions
            {
                Metadata = new BsonDocument("contentType", file.ContentType)
            };

            using (var reader = new StreamReader((Stream)file.OpenReadStream()))
            {
                var stream = reader.BaseStream;
                var fileId = await GridFsBucket.UploadFromStreamAsync(file.FileName, stream, options);

                return(fileId.ToString());
            }
        }
예제 #4
0
        public IEnumerable <MongoItemVM> GetAllFiles(int skip, int take)
        {
            var options = new GridFSFindOptions
            {
                Limit = take,
                Skip  = skip,
            };

            var stream = GridFsBucket
                         .Find(new BsonDocumentFilterDefinition <GridFSFileInfo <ObjectId> >(new BsonDocument()), options)
                         .ToList()
                         .Select(s => new MongoItemVM
            {
                Id             = s.Id,
                Filename       = s.Filename,
                MetaData       = s.Metadata,
                Length         = s.Length + "",
                UploadDateTime = s.UploadDateTime,
            }).ToList();

            return(stream);
        }
예제 #5
0
        public async Task <string> UploadAsync(CdnUploadRequest file)
        {
            Dictionary <string, object> metadata = new Dictionary <string, object>();

            metadata.Add("contentType", file.ContentType);
            metadata.Add("sourceType", file.SourceType);
            metadata.Add("sourceId", file.SourceId);
            metadata.Add("title", file.Title);

            var options = new GridFSUploadOptions
            {
                Metadata = new BsonDocument(metadata)
            };

            file.FileContent = Convert.FromBase64String(file.FileContentBase64);
            var mongoFileId = (await GridFsBucket.UploadFromBytesAsync(file.FileName, file.FileContent, options)).ToString();

            if (!string.IsNullOrEmpty(mongoFileId))
            {
                cdnService.SaveMongoFileData(file, mongoFileId);
            }
            return(mongoFileId);
        }
예제 #6
0
        public IEnumerable <MongoItemVM> GetAllFilesByContentType(string contentType, int skip, int take)
        {
            var filter = Builders <GridFSFileInfo> .Filter
                         .Eq(info => info.Metadata, new BsonDocument(new BsonElement("contentType", contentType)));

            var options = new GridFSFindOptions
            {
                Limit = take,
                Skip  = skip,
            };

            var stream = GridFsBucket.Find(filter, options)
                         .ToList()
                         .Select(s => new MongoItemVM
            {
                Id             = s.Id,
                Filename       = s.Filename,
                MetaData       = s.Metadata,
                Length         = s.Length + "",
                UploadDateTime = s.UploadDateTime,
            }).ToList();

            return(stream);
        }
예제 #7
0
 public async Task <GridFSDownloadStream <ObjectId> > DownloadAsync(string fileName)
 {
     return(await GridFsBucket.OpenDownloadStreamByNameAsync(fileName));
 }
예제 #8
0
 public async Task <GridFSDownloadStream <ObjectId> > DownloadAsync(ObjectId id)
 {
     return(await GridFsBucket.OpenDownloadStreamAsync(id));
 }
예제 #9
0
        public Task <bool> AnyAsync(string fileName)
        {
            var filter = Builders <GridFSFileInfo> .Filter.Where(x => x.Filename == fileName);

            return(GridFsBucket.Find(filter).AnyAsync());
        }
예제 #10
0
        public async Task <bool> AnyAsync(ObjectId id)
        {
            var filter = Builders <GridFSFileInfo> .Filter.Eq("_id", id);

            return(await GridFsBucket.Find(filter).AnyAsync());
        }
예제 #11
0
 public async Task DeleteAsync(ObjectId id)
 {
     await GridFsBucket.DeleteAsync(id);
 }
예제 #12
0
 public byte[] GetFile(ObjectId id)
 {
     return(GridFsBucket.DownloadAsBytes(id));
 }