如何显示存储在本地驱动器中的图像?

时间:2010-06-28 07:39:11

标签: asp.net

我有一个asp页面,我必须在其中显示存储在本地磁盘C中的图像: 即.. C:\ Program Files \ Adrenalin \ Adrenalin \ UploadedFiles \ TemplateFile \ abc.jpg

我怎么能这样做......我无法做到这一点。 图像不会显示,而是显示一个空的图像持有者,其中包含指定图像的名称,并且URL不可用。

请帮忙......

3 个答案:

答案 0 :(得分:12)

如果图片位于网站文件夹之外,您将遇到权限问题。传统上,网站在NETWORK SERVICE用户帐户下运行,这将限制对文件夹外部文件的访问。您需要从具有类似访问权限的文件夹中提取文件,这样做非常不明智,尤其是来自Program Files。

您应该通过网页或网络服务代理该文件,这不会暴露图像在网站外部提供的事实。您需要确保目标文件夹C:\ Program Files \ Adrenalin \ Adrenalin \ UploadedFiles \ TemplateFile具有NETWORK SERVICE读取权限。

例如。创建一个空白的ASP.NET页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ImageServer.aspx.cs" Inherits="ImageServer" %>

后面的代码:

class ImageServer
{
  void Page_Load(object sender, EVentArgs e)
  {
    Response.ContentType="image/jpeg"; // for JPEG file
    string physicalFileName=@"C:\Program Files\Adrenalin\Adrenalin\UploadedFiles\TemplateFile\abc.jpg";
    Response.WriteFile(physicalFileName);
  }
}

通过转到网址

在浏览器中进行测试
http://<localhost>/<website>/ImageServer.aspx

你应该得到图像。

然后,在标记内,使用页面的URL作为图像占位符:

<img src="ImageServer.aspx" alt="Image served" />

更新:

查看您的最新评论,我建议您使用某种员工代码发送QueryString参数,并使用该参数查询数据库并在Page_Load()方法中获取相应的文件名。不要将文件名作为QueryString的一部分发送。

答案 1 :(得分:2)

您尝试做的事情可以发挥作用,但在Web开发中却非常气馁。将权限问题放在一边(非常严重),你永远不能假设你的图像在你在驱动器C上提供的绝对路径中可用:。

你应该做的是在你的网站目录中创建一个文件夹并使用它来存储图像,并使用相对链接而不是绝对链接。

即使您现在设法使绝对链接正常工作,但在将来运行不同配置的应用程序时,也要为将来的严重问题做好准备。

答案 2 :(得分:1)

复制项目根文件夹中的图像,并将图像源仅作为图像名称而不是完整路径提供。 例如,img src =“battlefield.jpg”