ASP.NET:图像 URL 正确,但图像不显示
Posted
技术标签:
【中文标题】ASP.NET:图像 URL 正确,但图像不显示【英文标题】:ASP.NET: Image URL is correct, but image does not display 【发布时间】:2020-06-10 20:49:12 【问题描述】:我知道以前有人问过这个问题,因为这是一个菜鸟问题,但这里的其他答案并没有为我澄清。我上传文件然后提供预览。我的上传按钮的点击事件是这样的:
protected void UploadFile (object sender, EventArgs e)
string folderPath = Server.MapPath ("~/Uploads/");
// If folder does not exist, create it.
if (!Directory.Exists (folderPath))
Directory.CreateDirectory (folderPath);
//Save the File to the Directory (Folder).
FileUpload.SaveAs (folderPath + Path.GetFileName (FileUpload.FileName));
//Display the Picture in Image control.
imgItem.ImageUrl = folderPath + Path.GetFileName (FileUpload.FileName);
上传工作正常,但图片控件(imgItem)不显示图片。当我跟踪它时,该 URL 看起来很完美。网址是:
"C:\\MyStuff\\Source\\Inventory\\Inventory\\UserInterface\\Uploads\\sample.jpg"
这应该行得通。我到底做错了什么?
编辑:我觉得这根本不是一个好的解决方案,但是我发现如果我将最后一行更改为该程序,程序会按预期工作:
imgItem.ImageUrl = "~/Uploads/" + Path.GetFileName (FileUpload.FileName);
没有人有更干净、更少硬编码的解决方案吗?
【问题讨论】:
"C:\blah\blah" 不是“完美的”。这与你想要的相反。该页面将在最终用户的计算机上查看。他们不会在“C:\blah\blah”的机器上拥有这个文件。相反,您必须向他们提供一个指向您实际提供文件的路径的 URL。 感谢您的评论。我实际上并没有引用驱动器号。这是一个相对路径,所以它确实存在于服务器上。 是的,您确实引用了驱动器号。你看过Server.MapPath ("~/Uploads/")
给你什么了吗?
好的,我明白你的意思了。那么如何重定向它以指向服务器呢?
你已经明白了。这是您发布的“硬编码解决方案”。你已经硬编码了上面~/Uploads/
的路径,你似乎并没有犹豫,所以我不明白你为什么在这里这样做。您当然可以将其更改为从配置中获取路径,或者使用 const 或其他获取基本路径的方法,但总体思路就是您已经展示的内容。
【参考方案1】:
好吧,
“C:\MyStuff\Source\Inventory\Inventory\UserInterface\Uploads\sample.jpg”
实际上是文件路径,而不是 URL。由于您使用“URL”这个词,我假设您正在构建一个网站。这意味着您需要一个正确的 URL(例如 http(s)://yourdomain.com/Source/Inventory/..../sample.jpg)
如果您不知道文件路径的 url 是什么,您可以使用 IIS 中的虚拟文件夹来映射它。 https://docs.kentico.com/k11/installation/deploying-kentico-to-a-live-server/creating-virtual-directories-and-application-pools-in-iis-7-5-and-7-0
【讨论】:
【参考方案2】:imgItem.ImageUrl = "~/Uploads/" + Path.GetFileName (FileUpload.FileName);
【讨论】:
以上是关于ASP.NET:图像 URL 正确,但图像不显示的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core tilde slash (~/) 不解析图像路径
ASP.net MVC 验证突出显示和不正确字段上的图标 Jquery