Exemplo n.º 1
0
        public async Task <IEnumerable <GridFSFileInfo> > GetLogFilesInfoByName(string fileName)
        {
            var filter = Builders <GridFSFileInfo> .Filter.Eq <string>(info => info.Filename, fileName);

            var fileInfos = await _gridFS.FindAsync(filter);

            return(await fileInfos.ToListAsync());
        }
Exemplo n.º 2
0
        public async Task <long> GetFilesCountAsync()
        {
            var filter   = Builders <GridFSFileInfo> .Filter.Empty;
            var options  = new GridFSFindOptions {
            };
            long counter = 0;

            using IAsyncCursor <GridFSFileInfo> cursor = await gridFSBucket.FindAsync(filter, options);

            await cursor.ForEachAsync(x => counter++);

            return(counter);
        }
Exemplo n.º 3
0
        public async Task <long> GetSizeAsync(string fileName,
                                              CancellationToken ct = default)
        {
            var name = GetFileName(fileName, nameof(fileName));

            var fileQuery = await bucket.FindAsync(Filters.Eq(x => x.Id, name), cancellationToken : ct);

            var fileObject = await fileQuery.FirstOrDefaultAsync(ct);

            if (fileObject == null)
            {
                throw new AssetNotFoundException(fileName);
            }

            return(fileObject.Length);
        }
        /// <summary>
        /// Сохранить файл в стор
        /// </summary>
        /// <param name="file">файл</param>
        /// <param name="cancellationToken">токен признака отмены</param>
        /// <returns>Идентификатор сохранённого файла</returns>
        public async Task <String> SaveFileAsync(IFormFile file, CancellationToken cancellationToken)
        {
            var hash = await GetHash(file, cancellationToken);

            var filter = Builders <GridFSFileInfo> .Filter.Eq(info => info.Metadata["hash"], hash);

            var existsFiles = await _gridFs.FindAsync(filter, cancellationToken : cancellationToken);

            var existsFile = await existsFiles.FirstOrDefaultAsync(cancellationToken);

            if (existsFile != null)
            {
                return(existsFile.Metadata["FileName"].AsString);
            }

            var fileName = Guid.NewGuid().ToString();
            var metaData = new Dictionary <String, Object>
            {
                ["ContentType"]    = file.ContentType,
                ["length"]         = file.Length,
                ["NonUniqueExtId"] = file.FileName,
                ["FileName"]       = fileName,
                ["hash"]           = hash,
            };
            await _gridFs.UploadFromStreamAsync(
                fileName,
                file.OpenReadStream(),
                new GridFSUploadOptions
            {
                Metadata = new BsonDocument(metaData)
            }, cancellationToken);

            return(fileName);
        }
Exemplo n.º 5
0
        //Async
        public async Task <IStorageFile> CreateFileAsync(string path, byte[] arr = null)
        {
            if (arr == null)
            {
                arr = new byte[0];
            }
            var id = await _bucket.UploadFromBytesAsync(path, arr);

            var info = _bucket.FindAsync(Builders <GridFSFileInfo> .Filter.Eq("_id", id)).Result.First();

            return(new GridFSFileStorage(info, _bucket));
        }
Exemplo n.º 6
0
        public async Task <string> GetFileName(string id, FileTypeEnum fileType)
        {
            var builder = Builders <GridFSFileInfo> .Filter;
            var filter  = builder.Eq("_id", new ObjectId(id)) & builder.Eq("Metadata.type", (int)fileType);
            var cursor  = await _gridFS.FindAsync(filter);

            var result = cursor.FirstOrDefault();

            return(result?.Filename);
        }
Exemplo n.º 7
0
        public async void ReNameFile(string fileName, string newFileName)
        {
            var filter = Builders <GridFSFileInfo> .Filter.Eq(x => x.Filename, fileName);

            var filesCursor = await _gridFsBucket.FindAsync(filter);

            var files = await filesCursor.ToListAsync();

            foreach (var file in files)
            {
                await _gridFsBucket.RenameAsync(file.Id, newFileName);
            }
        }
Exemplo n.º 8
0
        public async Task <long> GetSizeAsync(string fileName, CancellationToken ct = default)
        {
            var name = GetFileName(fileName, nameof(fileName));

            var find = await bucket.FindAsync(Builders <GridFSFileInfo <string> > .Filter.Eq(x => x.Id, name), cancellationToken : ct);

            var file = await find.FirstOrDefaultAsync(ct);

            if (file == null)
            {
                throw new AssetNotFoundException(fileName);
            }

            return(file.Length);
        }
        public async Task <Model.FileMetadata> GetFileMetadata(HostConfig host, string file)
        {
            var index = file.LastIndexOf('.');

            file = index == -1 ? file : file.Substring(0, index); //remove extension if any

            IGridFSBucket bucket = GetBucket(host);

            try
            {
                var ob = new ObjectId(file);
                if (ob == ObjectId.Empty)
                {
                    return(null);
                }

                var filter = Builders <GridFSFileInfo> .Filter.Eq("_id", ob);

                var findOptions = new GridFSFindOptions
                {
                    Limit = 1
                };

                var fi = await bucket.FindAsync(filter, findOptions);

                var metadata = BsonSerializer.Deserialize <Model.FileMetadata>(fi.FirstOrDefault().Metadata);

                return(metadata);
            }
            catch (ArgumentException ex)
            {
                throw new GridFsObjectIdException(ex.Message);
            }
            catch (FormatException ex)
            {
                throw new GridFsObjectIdException(ex.Message);
            }
            catch (Exception ex)
            {
                if (ex is GridFSFileNotFoundException || ex is IndexOutOfRangeException || ex is ArgumentNullException)
                {
                    return(null);
                }

                //log other errors....
                throw;
            }
        }
Exemplo n.º 10
0
        public async Task <(Stream, StoredFileInfo)> GetAsync(string fileId, CancellationToken cancellationToken = default)
        {
            _ = fileId ?? throw new ArgumentNullException(nameof(fileId));

            IGridFSBucket bucket = getBucket(_dbClient);
            FilterDefinition <GridFSFileInfo> filter = Builders <GridFSFileInfo> .Filter.Eq(p => p.Filename, fileId);

            using var cursor = await bucket.FindAsync(filter, null, cancellationToken);

            var file = await cursor.FirstOrDefaultAsync(cancellationToken);

            if (file == null)
            {
                return(null, null);
            }
            var stream = await bucket.OpenDownloadStreamAsync(file.Id, null, cancellationToken);

            return(stream, BsonSerializer.Deserialize <StoredFileInfo>(file.Metadata));
        }
Exemplo n.º 11
0
        public byte[] Download(ObjectId fileId)
        {
            var filter = Builders <GridFSFileInfo <ObjectId> >
                         .Filter.Eq(x => x.Id, fileId);

            var searchResult = bucket.FindAsync(filter);

            var fileEntry = searchResult.Result.SingleOrDefault();

            if (fileEntry == null)
            {
                content = null;
            }
            else
            {
                content = bucket.DownloadAsBytesAsync(fileId).Result;
            }

            return(content);
        }
Exemplo n.º 12
0
        public async Task DeleteFileAsync(string taskId)
        {
            try
            {
                var files = await _gridFs.FindAsync(
                    new ExpressionFilterDefinition <GridFSFileInfo>(x => x.Filename == taskId));

                var file = await files.FirstOrDefaultAsync();

                if (file != null)
                {
                    await _gridFs.DeleteAsync(file.Id);
                }
            }
            catch (Exception e)
            {
                _logger.LogError("Error occured while uploading {@TaskId} in {@AgentName} with {@Exception}",
                                 taskId, nameof(FileWorkerAgentImpl), e.ToString());
            }
        }
Exemplo n.º 13
0
        public async Task <bool> DeleteAsync(Guid id, CancellationToken cancellationToken)
        {
            FilterDefinition <GridFSFileInfo> filter = Builders <GridFSFileInfo> .Filter
                                                       .Eq(x => x.Filename, id.ToString("N"));

            IAsyncCursor <GridFSFileInfo> cursor = await _gridFSBucket
                                                   .FindAsync(filter, options : null, cancellationToken);

            GridFSFileInfo?file = cursor.FirstOrDefault(cancellationToken);

            if (file != null)
            {
                await _gridFSBucket.DeleteAsync(file.Id, cancellationToken);

                Log.Information("Thmbnail {Filename} deleted.", id);
                return(true);
            }

            return(false);
        }
Exemplo n.º 14
0
        async Task <DocumentInfo?> IQueryHandler <GetImgQuery, DocumentInfo?> .Handle(GetImgQuery query, CancellationToken cancellationToken)
        {
            var filter = Builders <GridFSFileInfo> .Filter.Eq(info => info.Filename, query.ImageId.ToString());

            var fileInfo = (await _gridFs.FindAsync(filter, null, cancellationToken)).FirstOrDefault();

            if (fileInfo == null)
            {
                return(null);
            }
            var memstream = new MemoryStream();
            await _gridFs.DownloadToStreamAsync(fileInfo.Id, memstream, cancellationToken : cancellationToken);

            return(new DocumentInfo(
                       id: query.ImageId,
                       memoryStream: memstream,
                       contentType: fileInfo.Metadata["ContentType"].ToString(),
                       length: fileInfo.Length,
                       fileName: fileInfo.Metadata.Contains("FileName") ? fileInfo.Metadata["FileName"].ToString() : "",
                       nonUniqueExtId: fileInfo.Metadata.Contains("NonUniqueExtId") ? fileInfo.Metadata["NonUniqueExtId"].ToString() : ""
                       ));
        }
Exemplo n.º 15
0
 public void Initialize()
 {
     try
     {
         _bucket.FindAsync(Builders <GridFSFileInfo <BsonValue> > .Filter.Eq(info => info.Filename, ""))
         .ContinueWith(task => _ = task.Exception, default, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.Default);