Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions LightBlue/Standalone/StandaloneAzureBlockBlob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class StandaloneAzureBlockBlob : IAzureBlockBlob
private readonly string _blobPath;
private readonly string _metadataPath;
private readonly StandaloneAzureBlobProperties _properties;
private Dictionary<string, string> _metadata;
private Dictionary<string, string> _metadata = new Dictionary<string, string>();
private readonly TimeSpan _waitTimeBetweenRetries = TimeSpan.FromSeconds(5);
private string _blobDirectory;
private string _metadataDirectory;
Expand Down Expand Up @@ -345,19 +345,23 @@ public Task UploadFromByteArrayAsync(byte[] buffer, int index, int count)
throw new ArgumentOutOfRangeException(nameof(count));

EnsureBlobDirectoryExists();
EnsureMetadataDirectoryExists();
return UploadFromByteArrayInternalAsync(buffer, index, count);
}

private async Task UploadFromByteArrayInternalAsync(byte[] buffer, int index, int count)
{
using (var fileStream = new FileStream(_blobPath, FileMode.Create, FileAccess.Write, FileShare.None, BufferSize, true))
using (var metadataFileStream = new FileStream(_metadataPath, FileMode.Create, FileAccess.Write, FileShare.None, BufferSize, true))
{
await fileStream.WriteAsync(buffer, index, count).ConfigureAwait(false);
}

if (_properties.ContentType != null)
{
await SetPropertiesAsync();
var metadataStore = new StandaloneMetadataStore
{
ContentType = _properties?.ContentType ?? DefaultContentType,
Metadata = _metadata
};
metadataStore.WriteToStream(metadataFileStream);
}
}

Expand Down
11 changes: 9 additions & 2 deletions LightBlue/Standalone/StandaloneMetadataStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ public void WriteToStreamAndClose(FileStream fileStream)
{
using (fileStream)
{
var serialized = JsonSerializer.SerializeToUtf8Bytes(this);
fileStream.Write(serialized, 0, serialized.Length);
WriteToStreamInternal(fileStream);
}
}

public void WriteToStream(FileStream fileStream) => WriteToStreamInternal(fileStream);

public static StandaloneMetadataStore ReadFromStream(FileStream fileStream)
{
using (var reader = new StreamReader(fileStream, System.Text.Encoding.UTF8, true, StandaloneAzureBlockBlob.BufferSize, true))
Expand All @@ -36,5 +37,11 @@ public static async Task<StandaloneMetadataStore> ReadFromStreamAsync(FileStream
return JsonSerializer.Deserialize<StandaloneMetadataStore>(content);
}
}

private void WriteToStreamInternal(FileStream fileStream)
{
var serialized = JsonSerializer.SerializeToUtf8Bytes(this);
fileStream.Write(serialized, 0, serialized.Length);
}
}
}