gpt4 book ai didi

ASP.NET (MVC) 提供图像

转载 作者:行者123 更新时间:2023-12-02 15:19:23 25 4
gpt4 key购买 nike

我正在创建一个 MVC 3 应用程序(尽管同样适用于其他技术,例如 ASP.NET Forms),并且只是想知道从代码提供图像而不是使用直接虚拟路径(例如通常)。

我的想法是改进提供文件的通用方法:

  1. 应用安全检查
  2. 基于路由值提供文件的标准化方法
  3. 返回修改后的图像(如果需要),例如不同的维度(好吧,这只会被谨慎使用,所以不要将其与上面的性能问题联系起来)。
  4. 在允许访问资源之前执行业务逻辑

我知道该怎么做,但我不知道是否应该这样做。

  1. 有哪些性能问题(如果有)
  2. 有什么奇怪的事情发生吗?图像仅按顺序加载(也许这就是 HTML 目前的做法,我不确定 - 在这里暴露了我的无知)。
  3. 您能想到的任何其他内容。

希望这一切都有意义!

谢谢,丹。

更新

好的 - 让我们具体了解一下:

使用这种类型的方法通过内存流在 MVC 3 中提供所有图像会对性能产生什么影响?注意:图像 url 将是 GenericFetchImage/image1(为了简单起见 - 我的所有图像都是 jpeg)。

public FileStreamResult GenericFetchImage(string RouteValueRefToImage)
{
// Create a new memory stream object
MemoryStream ms = new MemoryStream();

// Go get image from file location
ms = GetImageAndPutIntoMemoryStream(RouteValueRefToImage);

// return the output as a file
return new FileStreamResult(ms, "image/jpeg");
}

我知道此方法有效,因为我使用它根据验证码图像的 session 值动态生成图像。它非常简洁 - 但我想使用这种方法进行所有图像检索。

我想在上面的例子中我想知道这是否可以这样做,或者是否需要更多的处理来执行,如果需要,需要多少处理?例如,如果访问者数量乘以 1000,那么服务器在传送图像时是否会承受处理负担。

谢谢!

最佳答案

之前曾提出过类似的问题( Can an ASP.Net MVC controller return an Image? ),并且看来通过操作与直接提供图像相比,性能影响非常小。正如已接受的答案所指出的,差异似乎约为毫秒(在该测试用例中,约为 13%)。您可以在本地重新运行测试,看看您的硬件有什么不同。

对于您是否应该使用它的问题的最佳答案来自此 answer到(另一个)类似的问题(强调我的):

DO worry about the following: you will need to re-implement a caching strategy on the server, since IIS manages that for static files requested directly. You will also need to make sure you manage your client-side caching with the correct headers included in the response. Ultimately, just ask yourself if re-inventing a method of serving static files from a server is something that serves your application's needs.

为了解决您随问题提供的具体案例:

  1. Apply security checks

    您已经可以使用 IIS 7 integrated pipeline 来执行此操作。文档中的相关内容:

    Allowing services provided by both native and managed modules to apply to all requests, regardless of handler. For example, managed Forms Authentication can be used for all content, including ASP pages, CGIs, and static files.

  2. Standardised method of serving files based on route values

    如果我正确地阅读了文档,您可以尽早在管道中插入一个模块,以重写传入的 URL 以直接指向静态资源,并让 IIS 处理来自那里的请求。 (为了完整起见,还有一个有关将路线映射到法师的相关问题: How do I route images using ASP.Net MVC routing? )

    Empowering ASP.NET components to provide functionality that was previously unavailable to them due to their placement in the server pipeline. For example, a managed module providing request rewriting functionality can rewrite the request prior to any server processing, including authentication.

    还有一些相当强大的URL rewrite features IIS 或多或少是开箱即用的。

  3. Returning modified images (if requested) e.g. different dimentions (ok this would only be used sparingly so don't relate this to the performance question above).

    它看起来像 module that does this已可用于 IIS。不确定这是否属于通过代码提供图像的范围,我想可能是这样。

  4. Perform business logic before allowing access to the resource

    如果您正在执行业务逻辑来生成所述资源(例如 chart )或正如您提到的验证码图像,那么是的,您基本上别无选择,只能这样做。

关于ASP.NET (MVC) 提供图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com