Я создаю приложение, в котором пользователь может загрузить свой текстовый файл и узнать о его наиболее часто используемом слове.
Я пытался следовать этому действию c, чтобы привыкнуть к идее использования AZURE BLOBS ХРАНЕНИЯ - https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet
Но я супер новичок ie, и мне трудно понять, как адаптировать эти методы BLOB-объектов для моего метода POST.
Это мое sudo - то, что мне нужно в моем контроллере и что должно произойти, когда запускается метод POST.
a. Нет необходимости в DELETE или PUT, не заменяя данные и не удаляя в этом приложении
b. Может понадобиться метод GET, но как только метод POST запущен, он должен передать текстовый контекст компоненту FE
Метод POST
- connect с azure учетной записью хранения
- , если это первый раз POST, создайте контейнер для хранения текстового файла a. как я могу соединиться с существующим контейнером, если новый контейнер уже сделан? Я нашел это, но это для старого CloudBlobContainer. Не новая версия SDK 12.
.GetContainerReference($"{containerName}");
загрузить текстовый файл в контейнер получить текст выбранного файла и вернуть
И вот мой контроллер.
public class HomeController : Controller
{
private IConfiguration _configuration;
public HomeController(IConfiguration Configuration)
{
_configuration = Configuration;
}
public IActionResult Index()
{
return View();
}
[HttpPost("UploadText")]
public async Task<IActionResult> Post(List<IFormFile> files)
{
if (files != null)
{
try
{
string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
string containerName = "textdata" + Guid.NewGuid().ToString();
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
//Q. How to write a if condition here so if the POST method has already triggered and container already created, just upload the data. Do not create a new container?
string fileName = //Q. how to get the chosen file name and replace with newly assignmed name?
string localFilePath = //Q. how to get the local file path so I can pass on to the FileStream?
BlobClient blobClient = containerClient.GetBlobClient(fileName);
using FileStream uploadFileStream = System.IO.File.OpenRead(localFilePath);
await blobClient.UploadAsync(uploadFileStream, true);
uploadFileStream.Close();
string data = System.IO.File.ReadAllText(localFilePath, Encoding.UTF8);
//Q. If I use fetch('Home').then... from FE component, will it receive this data? in which form will it receive? JSON?
return Content(data);
}
catch
{
//Q. how to use storageExeption for the error messages
}
finally
{
//Q. what is suitable to execute in finally? return the Content(data) here?
if (files != null)
{
//files.Close();
}
}
}
//Q. what to pass on inside of the Ok() in this scenario?
return Ok();
}
}
Q1. Как я могу проверить, был ли метод POST уже запущен и создал Контейнер? Если так, как я могу получить имя контейнера и подключиться к нему?
Q2. Должен ли я дать новое присвоенное имя для выбранного файла? Как я могу это сделать?
Q3. Как я могу получить имя выбранного файла, чтобы передать его для обработки Q2?
Q4. Как получить локальный путь к файлу, чтобы я мог перейти к FileStream?
Q5. Как вернуть данные Контента и передать в ИП? используя fetch('Home').then...
как это?
Q6. Как я могу использовать storageExeption для сообщений об ошибках
Q7. Что подходит для выполнения в конце концов? вернуть содержимое (данные) сюда?
Q8. Что передать внутри Ok () в этом сценарии?
Любая помощь приветствуется! Я знаю, что задавал много вопросов здесь. Большое спасибо!