Использование функции Azure (.NET Core) для загрузки файла - PullRequest
0 голосов
/ 08 октября 2018

Я создал функцию HTTP Triggered Azure (v2) с использованием .NET Core, надеясь, что я смогу выполнить эту функцию, передав некоторую информацию в теле запроса, а затем получить функцию возврата / загрузки файла в браузере.К сожалению, я изо всех сил пытаюсь заставить это работать.

Ниже приведен фрагмент кода

public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
{
    string csv;

    //Do some stuff to create a csv

    byte[] filebytes = Encoding.UTF8.GetBytes(csv);

    req.HttpContext.Response.Headers.Add("content-disposition", "attachment;filename=Export.csv");
    req.HttpContext.Response.ContentType = "application/octet-stream";

    return (ActionResult)new OkObjectResult(filebytes);
}

Когда я делаю сообщение, используя Почтальон, запрос принимается, но ответ 406 "неприемлем" ивывод в состоянии журнала

"Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector [1] Не найден форматер вывода для типа содержимого application / octet-stream, чтобы написать ответ."

Я пробовал несколько типов контента, включая text / plain и text / csv, и все они дают одинаковый ответ о форматировании вывода.

Если я удаляю или закомментирую ContentType, запрос обрабатывает и возвращает 200, ноФайловые байты возвращаются в теле ответа, а не загружаются в браузер.

1 Ответ

0 голосов
/ 08 октября 2018

Для этого вам понадобится FileContentResult:

public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
{
    string csv;

    //Do some stuff to create a csv

    byte[] filebytes = Encoding.UTF8.GetBytes(csv);

    return new FileContentResult(filebytes, "application/octet-stream") {
        FileDownloadName = "Export.csv"
    };
}

Хотя комментарии правильно указывают на то, что идеальным решением является запуск асинхронной обработки HTTP-функции, возврат 202 Принятого ответа, сохранениеВ результате хранения хранилища больших двоичных объектов клиент должен дождаться завершения обработки, прежде чем начинать загрузку большого двоичного объекта, а затем удалить большой двоичный объект после его загрузки. Текущая стоимость функций Azure составляет всего 0,000016 долл. США / ГБ, поэтому вы можете столкнуться с излишней сложностью, если только вы недовольно высокий трафик.

...