现在我正在使用C#从控制器返回图像
返回文件(字节,“ image / jpeg”);
,它工作正常,但实际上返回文件。同时,我想返回将在页面上显示的图像,但又不要使其保持静态(因此,如果用户提供其他网址,则他必须登录才能使用来访问它们。)
我设法找到的唯一方法是Base64编码,它可以正常工作,但是当img大小增加时,对于浏览器来说似乎有点落后。
也许是将图像注入.cshtml的某种形式,但听起来像Base64
答案 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的同一请求的一部分。