gpt4 book ai didi

c# - 使用 Azure Function (.NET Core) 下载文件

转载 作者:行者123 更新时间:2023-11-30 20:15:44 25 4
gpt4 key购买 nike

我已经使用 .NET Core 创建了 HTTP 触发的 Azure 函数 (v2),希望我可以在请求正文中传递一些信息的同时执行该函数,然后让该函数在浏览器中返回/下载文件。不幸的是,我正在努力让这个工作。

下面是一段代码

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);
}

当我使用 Postman 发帖时,请求被接受但响应为 406“ Not Acceptable ”并且日志中的输出状态为

"Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector[1] 没有找到内容类型“application/octet-stream”的输出格式化程序来编写响应。”

我已经尝试了多种内容类型,包括 text/plain 和 text/csv,它们都对输出格式给出了相同的响应。

如果我删除或注释掉 ContentType,请求处理并返回 200,但文件字节返回到响应正文中,而不是在浏览器中下载。

最佳答案

为此你需要一个 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 已接受响应,将结果保存到 blob 存储,让客户端在开始 blob 下载之前等待处理完成然后在下载 blob 后将其删除,当前 Azure Functions 定价仅为 0.000016 美元/GB-s,因此您可能会发现这过于复杂,除非您的流量非常高。

关于c# - 使用 Azure Function (.NET Core) 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52705755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com