上傳檔案到 Azure Container
前篇文章介紹了如何把資料傳至 Azure Table,本篇文章會講解如何上傳檔案。
下列程式要注意的是 BlobContainerClient 的用法,其實不難,呼叫 UploadBlobAsync
這個 method 就可以了,而取得所有檔案透過 PartitionKey 即可,如果是特定檔案的話,要有 RowKey。
private void Init()
{
TableServiceClient tableServiceClient = new TableServiceClient(TableConnectionString);
TableClient tableClient = tableServiceClient.GetTableClient(tableName: _tableName);
tableClient.CreateIfNotExistsAsync().Wait();
_cosmosClient = tableClient;
_blobContainerClient = new BlobContainerClient(BlobConnectionString, ContainerName);
_blobContainerClient.CreateIfNotExists();
}
public async Task AddPicData(PictureData pictureData, Stream stream)
{
var response = await _blobContainerClient.UploadBlobAsync(pictureData.FileName, stream);
await _cosmosClient.AddEntityAsync<PictureData>(pictureData);
}
public async Task<List<PictureData>> GetPictureDataList()
{
List<PictureData> list = _cosmosClient.Query<PictureData>(p => p.PartitionKey == PartitionKey).ToList();
return list;
}
下列程式碼是 Blazor 的前端部份,單純上傳檔案。
@page "/UploadPic"
@using AIPicturesAlbumWebAP.Data
@inject IPictureAppService pictureAppService
<h3>UploadPic</h3>
<Toasts class="p-3" Messages="messages" AutoHide="true" Delay=2000 Placement="ToastsPlacement.TopCenter" />
<InputFile OnChange="@LoadFiles" multiple />
@code {
List<ToastMessage> messages = new List<ToastMessage>();
private IBrowserFile browserFile;
private async void LoadFiles(InputFileChangeEventArgs e)
{
browserFile = e.File;
var stream = browserFile.OpenReadStream(maxAllowedSize: 512000000);
PictureData pictureData = new PictureData
{
Desc = string.Empty,
FileName = browserFile.Name,
ImageUrl = PictureRepository.CDNDomain + browserFile.Name,
Title = string.Empty
};
await pictureAppService.AddPicData(pictureData, stream);
Task.WaitAll();
messages.Add(CreateToastMessage(ToastType.Info));
}
private ToastMessage CreateToastMessage(ToastType toastType)
=> new ToastMessage
{
Type = toastType,
Message = $"File Uploaded. DateTime: {DateTime.Now}",
};
}
參考資料