【问题标题】:How to display an image in a blazor page if the image doesn't have a file extension?如果图像没有文件扩展名,如何在 blazor 页面中显示图像?
【发布时间】:2021-08-31 21:39:19
【问题描述】:

我似乎找不到与我的特定场景相关的内容 - 我知道在正常情况下如何显示图像。但是,由于我正在处理的系统的性质,很多数据本质上都是敏感的(包括图像),所以我将存储中的文件匿名化(剥离文件名和扩展名以存储在数据库中并映射到下载文件)。

由于文件是匿名的 - 将存储路径扔到 img 标签会导致通用图标(可能是由于缺少文件扩展名)。有没有办法屏蔽存储路径上的映射以使其正常工作,或者我是否需要设置某种形式的 Web 服务将图像作为内联响应提供?

【问题讨论】:

    标签: blazor blazor-server-side


    【解决方案1】:

    在启动时,您可以添加它以使其工作:

     app.UseStaticFiles(new StaticFileOptions
     {
       DefaultContentType = "image/gif"
     });
    

    我认为这会尝试使所有没有扩展名的文件成为图像?

    好处是您可以使用 FileProvider 将其锁定到某个文件夹:

     app.UseStaticFiles(new StaticFileOptions
     {
       DefaultContentType = "image/gif",
       FileProvider = new 
         PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), 
         "wwwroot/images"))
            });
    

    此示例仅允许将 wwwroot/images 中没有扩展名的文件作为 image 类型读取。

    如果您不想这样做,可以改为执行以下操作:

    你可以这样使用:

    <img src="data:image/gif;base64,@Convert.ToBase64String(File.ReadAllBytes("wwwroot/images/contact"))">
    

    不过可能有一些problems (in the comments)

    There is also this solution 但我相信上面那个更好。

    【讨论】:

    • 由于解决方案的动态性(如果这只是一个词),我选择以您提供的格式将 mimetype 传递到图像标签中。
    【解决方案2】:

    您应该能够在不考虑文件扩展名的情况下显示图像。文件扩展名只是让浏览器更快地显示文件,但是如果它没有扩展名,浏览器将通过猜测或查看文件的 MIME 类型来显示文件。

    因此,请确保您的网络服务器(图像来自哪里)在请求 img 对象时提供正确的 MIME 类型。

    https://developer.mozilla.org/en-US/docs/Learn/Server-side/Configuring_server_MIME_types

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 2019-02-07
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      相关资源
      最近更新 更多