Я пытаюсь реализовать конечную точку API ASP.NET Core для загрузки файлов в хранилище BLOB-объектов Azure.У меня есть следующий код внешнего интерфейса:
async uploadFile(file, onprogress) {
return new Promise((resolve, reject) => {
try {
var formData = new FormData();
formData.append("File", file);
var xhr = new XMLHttpRequest();
xhr.onload = response => {
resolve(JSON.parse(response.currentTarget.responseText));
};
xhr.upload.onprogress = onprogress;
xhr.open('POST', process.env.BASE_URL + 'cdn', true);
xhr.send(formData);
} catch (e) {
reject(e);
}
});
}
и backend
[HttpPost]
public async Task<File> UploadFile(IFormFile file)
{
using (var stream = file.OpenReadStream())
{
...
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = cloudBlobClient.GetContainerReference(settings.Cdn.AzureContainerName);
var blockBlob = container.GetBlockBlobReference(nameToSave);
await blockBlob.UploadFromStreamAsync(stream);
...
}
}
Проблема : я вижу, что когда я пытаюсь загрузить файл со стороны JS, яувидеть прогресс загрузки файла (через обратный вызов onprogess), но я ввожу метод UploadFile
в бэкэнд-контроллер только тогда, когда в JS прогресс загрузки достигает 100%.
Вопрос: Есть ли способ реализовать параллельную загрузку в Azure во время загрузки в контроллер?я думал, что потоки должны поддерживать это, но это не работает для меня.