#asp.net-core #asynchronous #file-upload #form-data
#asp.net-core #асинхронный #загрузка файла #форма-данные
Вопрос:
Я могу прочитать файл из form-data и сохранить его, как ожидалось. Однако, когда я выполняю асинхронное действие, поток закрывается, и файла больше нет. Удаление асинхронного действия означает, что оно снова работает. Мне нужно выполнить асинхронный запрос, чтобы сохранить файл в правильном месте.
[Route("uploadFile")]
[AllowAnonymous]
public async void uploadFile()
{
var files = HttpContext.Request.Form.Files;
if (files != null)
{
var file = files.FirstOrDefault();
var fileName = file.FileName;
using (var input = file.OpenReadStream())
{
var id = "someId";
await Task.Delay(TimeSpan.FromSeconds(2));
// after doing this async action, the file and stream are no longer accessible.
...
Комментарии:
1. файл или поток? похоже, это не связано с DynamoDB как таковым, но, скорее всего, проблема с поддержкой async в asp.net ядро: что-то, что можно попробовать — вместо выполнения запроса DynamoDB, попробуйте это:
await Task.Delay(TimeSpan.FromSeconds(2))
и посмотрите, вызывает ли это ту же проблему, и в этом случае вы можете, по крайней мере, сосредоточить свои усилия направильное направление2. как файл, так и поток. Файл становится нулевым, и поток закрывается. Какая отличная идея! Я попробовал это и подтвердил, что вы правы, проблема связана с поддержкой асинхронности в asp.net ядро. Спасибо, я обновлю вопрос
Ответ №1:
Я опубликовал это как вопрос к asp.net основная команда и получила ответ здесь.
Не используйте async void в вашем действии контроллера. Вместо этого используйте асинхронную задачу, чтобы платформа могла подождать, пока вы не закончите.
Я не ожидал, что возвращаемый тип повлияет на эту функциональность, но теперь я знаю.