may*_*ʎɐɯ 5 .net c# azure azure-blob-storage
我正在开发一个企业业务项目,需要将应用程序从本地迁移到 Azure 云。
某些应用程序需要 Azure Blob 存储。所有 Azure 云基础设施都可以使用 Manage Identity 进行访问,业务要求是在无法访问 Azure 门户的情况下测试和验证 Azure Blob 方法,开发人员只能访问任何非生产或生产的存储资源。也就是说,该公司要求我们在将代码推送到云之前通过在本地和 GitHub 工作流程上进行测试来使所有存储功能正常工作。
当然,我可以启动我的个人 Azure 帐户并使用它,但仍然会使用我的帐户作为游乐场进行测试,但并不是真正可用的测试。
通用测试 Azure Blob 存储的整个想法,无需对 Blob 存储有任何类型的访问权限。
这可能吗?我怎样才能实现这一目标?
以下是我针对 Azure Blob 的工作 POC 方法:
private readonly BlobContainerClient _blobContainerClient;
public AzureBlobStorage(string connectionString, string container)
{
_blobContainerClient = new BlobContainerClient(connectionString, container);
_blobContainerClient.CreateIfNotExists();
}
public async Task<string> ReadTextFile(string filename)
{
var blob = _blobContainerClient.GetBlobClient(filename);
if (!await _blobContainerClient.ExistsAsync()) return string.Empty;
var reading = await blob.DownloadStreamingAsync();
StreamReader reader = new StreamReader(reading.Value.Content);
return await reader.ReadToEndAsync();
}
public async Task CreateTextFile(string filename, byte[] data)
{
var blob = _blobContainerClient.GetBlobClient(filename);
await using var ms = new MemoryStream(data, false);
await blob.UploadAsync(ms, CancellationToken.None);
}
public async Task DeleteTextFile(string filename)
{
var blobClient = _blobContainerClient.GetBlobClient(filename);
await blobClient.DeleteAsync();
}
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我找到了解决方案并写了一篇关于它的文章。这是解决方案的简短版本。
要针对测试环境进行集成测试,我建议您遵循以下答案:
这是可能的,但需要几个步骤:
// here we pull azurite image
docker pull mcr.microsoft.com/azure-storage/azurite
// here we run azurite image and store data under c:\azurite folder
docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 -v c:/azurite:/data mcr.microsoft.com/azure-storage/azurite
Run Code Online (Sandbox Code Playgroud)
就我而言,我用我的天蓝色存储方法创建了一个简单的类。你可以做类似的事情(只是例子):
[Fact]
public async Task AzureBlobStorageTest()
{
// Arrange
await _azureBlobStorage?.CreateTextFile("file.txt", Encoding.UTF8.GetBytes(Content))!;
// Act
var readTextFile = await _azureBlobStorage.ReadTextFile("file.txt");
// Assert
Assert.Equal(Content, readTextFile);
// Finalizing
await _azureBlobStorage.DeleteTextFile("file.txt");
}
Run Code Online (Sandbox Code Playgroud)
您可以更详细地阅读这些步骤并找到源代码。
享受
免责声明:正如我上面提到的,我写了 3 篇关于解决这个问题的文章。此链接指的是我的个人网站。
| 归档时间: |
|
| 查看次数: |
3974 次 |
| 最近记录: |