我正在开发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");
});