ASP.NET最小API如何从URL返回/下载文件



我正在开发minimum api,我尝试的是当用户访问/download时,它会立即下载我的图片add.png

但无论我尝试什么,它都不起作用,因为我要么得到一个只有{}的空页面

这可能吗?如果是,如何

这是我迄今为止尝试过的代码。(我被拒绝访问该位置的所有权限!(

app.MapGet("/download", async () =>
{
var path = "add.png";
using (var stream = new FileStream(path, FileMode.Open))
{
stream.CopyToAsync(stream);
}
var ext = Path.GetExtension(path).ToLowerInvariant();
var result = (ext, Path.GetFileName(path));
return result;
});

当用户在我的api中进行/下载他将要下载的文件时,我该如何做到这一点

提前感谢

您可以使用Results.File返回要从Minimal API处理程序下载的文件:

app.MapGet("/download", () =>
{
var mimeType = "image/png";
var path = @"path_to_png.png";
return Results.File(path, contentType: mimeType);
});

由于某种原因,接受的答案对我不起作用。也许是因为我正在下载一个zip文件。。。以下是最终对我有效的…

app.MapGet("download/{fileName}", async (string fileName) => 
{
var mimeType = "application/zip";
var path = @$"{fileName}.zip";

var bytes = await File.ReadAllBytesAsync(path);
return Results.File(bytes, mimeType, $"{fileName}.zip");
})
.Produces(StatusCodes.Status200OK)
.Produces(StatusCodes.Status404NotFound)
.WithName($"GET {EndpointCategory} by Name")
.WithTags(Tag);

我尝试了三种不同的方式来下载使用asp.net核心最小api的文件。有一件事我没能弄清楚,当(1(和(2(从根级别下载文件时,(3(从wwwroot文件夹下载。如果有人能澄清这一点,那将是有帮助的。

请查看项目文件夹结构图-项目文件夹结构

app.MapGet("/showxwingdetails", () =>
{
// ( 1 )
//byte[] barr =  File.ReadAllBytes("xwing.jpg");
//return Results.File(barr, "image/jpg", "xwing.jpg");

// ( 2 )
//FileStream fs = File.OpenRead("xwing.jpg");   
//return Results.File(fs, "image/jpg", "xwing.jpg");

// ( 3 ) 
// return Results.File("xwing.jpg", "image/jpg", "xwing.jpg");

});

相关内容

  • 没有找到相关文章

最新更新