【发布时间】: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 或其他获取基本路径的方法,但总体思路就是您已经展示的内容。
标签: c# asp.net image-uploading web-controls