图像无法在 asp webapp (c#) 中解析
Posted
技术标签:
【中文标题】图像无法在 asp webapp (c#) 中解析【英文标题】:Images not resolving in asp webapp (c#) 【发布时间】:2011-01-30 08:39:50 【问题描述】:我一直在开发一个 ASP Web 应用程序,该应用程序涉及用户注册一个人的详细信息,包括该人的图像。详细信息/图像的文件名存储在 SQL 数据库中,图像文件名存储在 NVARCHAR
列中,而不是将实际图像存储在数据库中。
我创建了一个目录 C:\Images,应用程序将在其中存储图像文件。该应用程序在将图像移动到此位置时可以正常工作,但是当我打开将显示详细信息/图像的页面时,图像永远不会呈现。
我在开发过程中通过将图像存储在作为项目一部分的文件夹中解决了这个问题,但是在将项目发布到服务器后,应用程序拒绝允许将图像保存在 @987654322 内的任何目录中@.
所以我需要找出为什么图像存储在项目之外的文件夹中时不会呈现。
我检查了 html 页面的源代码,它也指向正确的位置和文件名:
img id="ctl00_MainContent_CandidateImage" src="C:\Images\applicant11.jpg" style="border-width:1px;border-style:solid;height:208px;width:208px;"
页面后面的代码在下面的代码中渲染图像:
// CandidatePhoto filename retrieved from DB.
CandidateImage.ImageUrl = "C:\\Images\\" + CandidatePhoto;
有人有什么想法吗?
干杯!
【问题讨论】:
【参考方案1】:您不能放置路径“c:\images”,因为当图像被渲染时,浏览器会在客户端机器上寻找图像。您可以执行以下两种解决方案之一:
您可以在您的网站上创建目录“/images”并将网站设置为“模拟”某个用户,并为该用户设置权限以允许他写入此文件夹。在 imageUrl 中,您将输入如下内容:“/images/image01.jpg”。
您可以创建一个为您呈现图像的页面,并通过帖子或查询字符串传递图像的 ID。类似“ImageRender.aspx?ID=123”的东西。 页面将从“c:\images”加载图像并在页面的响应中写入图像。在您的 ImageURL 中,您将始终输入“ImageRender.aspx?ID=[imageID]”。
我希望这会有所帮助。
【讨论】:
【参考方案2】:感谢大家的想法。
通过将具有读/写权限的 SERVERNAME\IUSER_SERVERNAME 用户添加到 wwwroot/Images 来实现
然后使用 Server.MapPath("~/images") 将图片保存到服务器上的目录中
然后像以前一样简单地从 ("~/Images") + CandidatePhoto 渲染图像。
再次感谢!
【讨论】:
【参考方案3】:您的图像应该类似于/images/bob.jpg
相对于应用程序,而不是操作系统驱动器,即使这是一个虚拟路径......但图像不会在任何客户端的C:\
驱动器上案例。
如果您在 IIS 应用程序/站点中有一个虚拟目录 Images/
,并且它指向服务器上的 C:\Images
,那么您的 url 将如下所示:
CandidateImage.ImageUrl = "~/Images/" + CandidatePhoto;
To create a virtual directory like this, see here
【讨论】:
【参考方案4】:您的图像的问题在于您指的是您计算机上的一个位置,而不是相对于文件本身位置的 URL。为了使浏览器能够呈现图像,它必须能够访问该图像的 URL。您实际上对浏览器说的是在用户计算机上找到图像,而不是在服务器上或其他地方
【讨论】:
图片从用户PC上传到服务器指定驱动器,成功。抱歉,我没有在我的问题中说清楚。【参考方案5】:当它在浏览器上呈现时,您实际上是在告诉它查看客户端的 c: 驱动器以显示图像...
我不知道为什么你不能用 wwwroot 保存,这可能只是一个权限问题,可以解决,或者你可以在你的站点中创建一个指向你的图像文件夹的虚拟目录并使用它页面中的虚拟目录 URL。
【讨论】:
啊,我现在明白了 - 在我的本地机器上运行 webapp 并使用 localhost 在服务器上运行它让我自己感到困惑。我已更新到 wwwroot 中的权限以尽可能多地允许,但我仍然收到有关文件夹“~/Images/”未植根的错误...我将继续修补并在希望解决时更新。跨度> @gordonk - 那么我认为您可能正在寻找的是 Server.MapPath("~/images") 来获取图像文件夹的物理路径。【参考方案6】:检查服务器上文件夹的权限。您可能已经从您的开发机器上复制了它,并使用您的计算机独有的权限来限制其他人的访问。
【讨论】:
如果图像链接指向 C:\,则权限无关紧要以上是关于图像无法在 asp webapp (c#) 中解析的主要内容,如果未能解决你的问题,请参考以下文章
如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像
无法在面向 netcoreapp3.0 的 ASP.NET Core WebApp 中为特定 API 控制器启用 CORS