public async Task <ObjectId> UploadFileAsync(Stream sourceStream, string fileName, GridFSUploadOptions uploadOptions = null) { var gridFsBucket = new GridFSBucket(this.database); GridFSUploadStream destinationStream = await gridFsBucket.OpenUploadStreamAsync(fileName, uploadOptions); //一次缓冲区大小 long filesize = sourceStream.Length; int maxlenth = 4096; byte[] buffer = new byte[maxlenth]; while (filesize > 0) { if (filesize < maxlenth) { maxlenth = (int)filesize; } await sourceStream.ReadAsync(buffer, 0, maxlenth); await destinationStream.WriteAsync(buffer, 0, maxlenth); filesize -= maxlenth; } await destinationStream.CloseAsync(); return(destinationStream.Id); }
public async Task SaveFileZip(int id, string consumer, Stream file) { var client = GetClient(); using (var session = await client.StartSessionAsync()) { session.StartTransaction(); var fileDoc = new FileDocument { Id = id, Consumer = consumer, FileName = $"{id}_{consumer}", State = FileState.Uploaded }; var bucket = new GridFSBucket(client.GetDatabase(_url.DatabaseName), new GridFSBucketOptions { BucketName = "Uploads" }); using (var uploadStream = await bucket.OpenUploadStreamAsync(fileDoc.FileName)) using (var gzipStream = new GZipStream(uploadStream, CompressionLevel.Optimal)) { await file.CopyToAsync(gzipStream); } var collection = client.GetDatabase(_url.DatabaseName).GetCollection <FileDocument>(CollectionName); await collection.InsertOneAsync(fileDoc); await session.CommitTransactionAsync(); } }
public async Task <ObjectId> UploadToStreamAsync(byte[] source, string fileName, GridFSUploadOptions options = null) { MongoClient client = GetClient(m_connectionStr); var db = client.GetDatabase(DatabaseName); var bucket = new GridFSBucket(db, BucksOptions); using (var stream = await bucket.OpenUploadStreamAsync(fileName, options)) { stream.Write(source, 0, source.Count()); return(stream.Id); } }
public async Task <bool> TryCreateDirectoryAsync(string path) { path = GetPhysicalPath(path); var dirpath = path + "/" + _dirName; var fileInfo = await getGridFSFileInfoAsync(dirpath); if (fileInfo != null) { throw new FileStoreException($"Cannot create directory because the path '{path}' already exists and is a file."); } var response = await _bucket.OpenUploadStreamAsync(dirpath); await response.CloseAsync(); return(response != null); }
private async Task <int> NormalizeAudio(FileReference fileReference, CreateSongRequest requestBody, string authorName) { var oldId = fileReference._id; var newId = ObjectId.GenerateNewId(); var gridFsBucket = new GridFSBucket <ObjectId>(MongoWrapper.Database); var downloadStream = await gridFsBucket.OpenDownloadStreamAsync(oldId); (Stream newAudio, int seconds) = await AudioHandlerService.ProcessAudio ( downloadStream, requestBody.Autoral?null : new int?(15), requestBody.Nome, authorName, fileReference.FileInfo.FileMetadata.ContentType ); fileReference._id = newId; if (fileReference.FileInfo == null) { fileReference.FileInfo = new Models.FileInfo(); } fileReference.FileInfo.FileMetadata.ContentType = "audio/mpeg"; fileReference.FileInfo.FileMetadata.FileType = FileType.Audio; var uploadStream = await gridFsBucket.OpenUploadStreamAsync ( newId, newId.ToString(), new GridFSUploadOptions { Metadata = fileReference.FileInfo.FileMetadata.ToBsonDocument(), } ); await newAudio.CopyToAsync(uploadStream); await uploadStream.CloseAsync(); var deleteOldTask = gridFsBucket.DeleteAsync(oldId); return(seconds); }
public async Task UploadFileAsync( IMongoDatabase database, string filePath, string fileName, GridFSUploadOptions uploadOptions = null) { var gridFsBucket = new GridFSBucket(database); using (FileStream sourceStream = File.Open(filePath, FileMode.Open)) { using ( GridFSUploadStream destinationStream = await gridFsBucket.OpenUploadStreamAsync(fileName, uploadOptions)) { await sourceStream.CopyToAsync(destinationStream); await destinationStream.CloseAsync(); } } }
/// <summary> /// Opens a Stream that can be used by the application to write data to a GridFS file. /// </summary> /// <param name="filename"></param> /// <param name="options"></param> /// <returns></returns> public Task <GridFSUploadStream> OpenUploadStreamAsync(string filename, GridFSUploadOptions options = null) { var bucket = new GridFSBucket(base.GetDatabase(), BucketOptions); return(bucket.OpenUploadStreamAsync(filename, options)); }