public async void AddFileAsync(string fileName) { if (fileName == null) { throw new ArgumentNullException(nameof(fileName)); } using (var stream = await _gridFsBucket.OpenUploadStreamAsync(fileName)) { var id = stream.Id; await stream.CloseAsync(); } }
public async Task CopyAsync(string name, string id, long version, string suffix, CancellationToken ct = default(CancellationToken)) { try { var file = GetFile(name); var toFile = GetFile(id, version, suffix); file.CopyTo(toFile.FullName); using (var readStream = await bucket.OpenDownloadStreamAsync(file.Name, cancellationToken: ct)) { using (var writeStream = await bucket.OpenUploadStreamAsync(toFile.Name, toFile.Name, cancellationToken: ct)) { var buffer = new byte[ChunkSizeBytes]; int bytesRead; while ((bytesRead = await readStream.ReadAsync(buffer, 0, buffer.Length, ct)) > 0) { await writeStream.WriteAsync(buffer, 0, bytesRead, ct); } await writeStream.CloseAsync(ct); } } } catch (FileNotFoundException ex) { throw new AssetNotFoundException($"Asset {name} not found.", ex); } catch (GridFSException ex) { throw new AssetNotFoundException($"Asset {name} not found.", ex); } }
public async Task WriteAsync(LuceneDirectory directory, SnapshotDeletionPolicy snapshotter) { var directoryInfo = ((FSDirectory)directory).Directory; var commit = snapshotter.Snapshot(); try { var fileId = directoryInfo.Name; try { await bucket.DeleteAsync(fileId); } catch (GridFSFileNotFoundException) { } using (var stream = await bucket.OpenUploadStreamAsync(fileId, fileId)) { using (var zipArchive = new ZipArchive(stream, ZipArchiveMode.Create, true)) { foreach (var fileName in commit.FileNames) { var file = new FileInfo(Path.Combine(directoryInfo.FullName, fileName)); using (var fileStream = file.OpenRead()) { var entry = zipArchive.CreateEntry(fileStream.Name); using (var entryStream = entry.Open()) { await fileStream.CopyToAsync(entryStream); } } } } } } finally { snapshotter.Release(commit); } }
public async Task <Stream> OpenWriteAsync() { return(await _bucket.OpenUploadStreamAsync(_fileInfo.Filename)); }