为什么我无法在我的 ASP.NET Core 网站中呈现此图像?

Why I am unable to render this image in my ASP.NET Core website?

提问人:abenci 提问时间:11/17/2023 最后编辑:abenci 更新时间:11/18/2023 访问量:137

问:

为什么我无法在我的 ASP.NET Core 网站中呈现此图像?大多数时候,它只是部分渲染,我的意思是它在某个时候被截断,达到全高的百分比。

视图:

    <img src="@Url.Action("GetImage", "Home")">

控制器:

    public FileContentResult GetImage()
    {
        Bitmap bitmap = new Bitmap(...);

        var file = File(bitmap.ToByteArray(), "image/png");

        bitmap.Dispose();

        return file;
    }

编辑:我还尝试使用 https://stackoverflow.com/a/3517974/261010 将其转换为 PNG,但没有改进。

编辑2:另一个测试:

    public FileContentResult GetImage()
    {
        Bitmap bitmap = new Bitmap(...);

        byte[] result = null;
        using (MemoryStream stream = new MemoryStream())
        {
            bitmap.Save(stream, ImageFormat.Png);
            result = stream.ToArray();
        }

        var file = File(result, "image/png");

        bitmap.Dispose();
        
        return file;
   }

编辑3:图像大小为 970x750 像素,较小的尺寸可以正确呈现。

C# visual-studio asp.net-core

评论

3赞 Dai 11/17/2023
...您确实知道 Win32 BMP 与 PNG 之间的区别,对吧?
1赞 abenci 11/17/2023
更改为根本无济于事......我应该转换为 PNG 吗?"image/bmp"
2赞 Aleksei Petrov 11/17/2023
可能是因为位图在完全写入响应之前就被释放了。
2赞 Guru Stron 11/17/2023
您究竟是如何创建位图的?您能否提供一个最小的可重复示例?您是否检查过所有内容是否实际添加,或者在流的情况下 - 刷新?
2赞 derloopkat 11/17/2023
@abenci 还有那张图片有多大?我猜浏览器正在从响应标头中检索实际内容类型。您是否在其他图像上遇到同样的问题?

答:

2赞 kevalsing 11/18/2023 #1

问题很可能出在文件大小上。您可以在 MBS 中共享文件的大小吗? ASP.NEt 核心应用程序的默认限制为 10 mb。 减小文件的大小或增加应用程序的默认限制。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<IISOptions>(options =>
    {
        options.MaxRequestBodySize = 1024 * 1024 * 100; // 100 MB
    });
}

评论

0赞 kevalsing 11/19/2023
这对你有用吗?
0赞 abenci 11/20/2023
我应该将此方法放在我的 ASP.NET Core MVC 网站的什么位置?
0赞 kevalsing 11/20/2023
StartUp.cs 文件。
0赞 abenci 11/20/2023
在此类项目的最新 Visual Studio 2022 模板中,没有任何文件。startup.cs
0赞 kevalsing 11/21/2023
我认为有程序.cs文件,您可以使用此文件添加此代码。