是否可以将img返回为<img src=""/>而不将其作为静态对象?

时间:2018-12-07 19:18:44

标签: c# html asp.net-core

现在我正在使用C#从控制器返回图像

  

返回文件(字节,“ image / jpeg”);

,它工作正常,但实际上返回文件。同时,我想返回将在页面上显示的图像,但又不要使其保持静态(因此,如果用户提供其他网址,则他必须登录才能使用来访问它们。)

我设法找到的唯一方法是Base64编码,它可以正常工作,但是当img大小增加时,对于浏览器来说似乎有点落后。

也许是将图像注入.cshtml的某种形式,但听起来像Base64

2 个答案:

答案 0 :(得分:2)

在您的控制器中,您可以执行以下操作(完全按照您的描述):

public class PhotoController : Controller {
    public ActionResult GetPhoto() {
        ...
        return File(bytes, "image/jpeg");
    }
}

如果您只是从文件系统中提取文件,则可以执行此操作(如果文件位于您的网站文件夹中):

return File("~/images/" + name, "image/jpeg");

或者如果文件不在您的网站文件夹中:

return PhysicalFile("C:\\images\\" + name, "image/jpeg");

然后在页面中,您有一个图像,该图像的来源指向该操作:

<img src="@Url.Action("GetPhoto", "Photo")">

答案 1 :(得分:1)

您为图像创建一个单独的“页面”,该页面仍仅返回图像文件。该页面根据用户和URL知道要显示哪个图像以及是否显示。因此,您可能会有一个Images.aspx页面,并按照以下方式将路由映射到您的页面:

/images/{imageID}

可以转换为Images.apsx?ImageID={imageID}。此“页面”不返回任何html ...仅图像,其内容类型为image/jpeg。然后,主页中html src元素的<img属性可以指向您的新路线。

无论您做什么,都要了解的重要一点是您正在使用HTTP的请求/响应模型。页面中的<img元素应通过完全独立的HTTP请求提供,而不应作为提供html的同一请求的一部分。