ZetCode

ASP.NET 发送图片

最后修改于 2023 年 10 月 18 日

在本文中,我们将展示如何从 ASP.NET 应用程序发送图片。

ASP.NET 是一个跨平台、高性能、开源的框架,用于构建现代、支持云的 Web 应用程序。它由 Microsoft 开发。

HTTP Content-Disposition

Content-Disposition 响应头是一个指示内容是期望在浏览器中内联显示还是作为附件下载并本地保存的头。

媒体类型

媒体类型或 MIME 类型是指示文件性质和格式的特定元数据信息。服务器可以发送各种类型的文件,包括文本文件、HTML 文件、PDF、Excel 或图像文件。

ASP.NET 内联发送图片

在第一个示例中,我们内联发送一张图片。

Results.File 函数将指定路径的文件写入响应。

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/image", () =>
{
    var mimeType = "image/png";
    var path = Path.Combine(builder.Environment.ContentRootPath, 
        "images/sid.png");

    return Results.File(path, contentType: mimeType);
});

app.Run("https://:3000");

我们有一个发送图片的端点。我们没有指定 Content-Disposition;默认为内联。

var mimeType = "image/png";

我们定义了一个 MIME 类型。这是一个 PNG 图片。

var path = Path.Combine(builder.Environment.ContentRootPath, 
    "images/sid.png");

我们构建了图片路径。

return Results.File(path, contentType: mimeType);

我们使用 Results.File 将图片返回给客户端。

ASP.NET 作为附件发送图片

在下一个示例中,我们将图片作为附件发送。

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/image", (HttpResponse response) =>
{
    var mimeType = "image/png";
    var path = Path.Combine(builder.Environment.ContentRootPath, 
        "images/sid.png");

    response.Headers.Add("Content-Disposition", "attachment;filename=sid.png");
    return Results.File(path, contentType: mimeType);
});

app.Run("https://:3000");

我们需要将 Content-Disposition 设置为 attachment。

app.MapGet("/image", (HttpResponse response) =>

要更改头,我们需要 HttpResponse 对象。

response.Headers.Add("Content-Disposition", "attachment;filename=sid.png");

我们添加了 Content-Disposition 头。

ASP.NET 使用视图发送图片

以下示例显示了如何在静态 HTML 文件中发送图片。

Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();

app.UseEndpoints(endppoints =>
{
    endppoints.MapDefaultControllerRoute();
});

app.Run("https://:3000");

我们有一个 MVC Web 应用程序。我们设置了路由、控制器和视图。

app.UseStaticFiles();

我们启用了静态文件服务。默认情况下,静态文件位于 wwwroot 目录中。

Controllers/HomeController.cs
using Microsoft.AspNetCore.Mvc;

namespace ServeImageEx.Controllers;

public class HomeController : Controller
{
    [HttpGet("image")]
    public IActionResult Image()
    {
        return View();
    }
}

我们在 HomeController 中有一个操作。它只是返回一个视图。

Views/Home/Image.cshtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Image</title>
</head>
<body>

    <h2>Sid the sloth</h2>

    <p>
        <img src="~/images/sid.png">
    </p>

</body>
</html>

在视图文件中,我们有一个 img 标签。它指向 wwwroot/images 目录中的 PNG 文件。

在本文中,我们已经从 ASP.NET 应用程序服务了图片文件。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

列出所有 ASP.NET 教程