将文件保存在站点文件上方的文件夹中

时间:2011-07-01 21:02:32

标签: asp.net razor root webmatrix mappath

我的主机具有以下结构:

/ Web - >网站的内容在哪里 /数据 - >文件夹读写权限

如何将文件上传到Data文件夹? 下面的代码不起作用,因为“〜”返回目录/ web。

//Save Image
var serverPath = Server.MapPath(Href("~/Data/") + id);
Directory.CreateDirectory(serverPath);
imgOri.Save(Path.Combine(serverPath, fileName));

2 个答案:

答案 0 :(得分:2)

Server.MapPath()用于将路径映射到应用程序的根目录。当您尝试在根目录上方上传文件时,它将无法正常工作。

您可以通过指定确切的文件路径(如果主机可以提供)来上传根目录上的文件:

  

var serverPath =“C:\ YourFolder \ Data \”)+ id);

我很惊讶您的主机允许您在根目录之外上传文件,因为这样做有很多危险......您也可能遇到信任问题。

答案 1 :(得分:1)

您可以使用Server.MapPath获取位于站点根目录级别的目录的路径,如下所示:

@{
    var root = Server.MapPath(".");
    var temp = root.Split('\\');
    temp[temp.Length - 1] = "Data";
    var newpath = string.Join("\\", temp);
}

托管公司过去常常在根文件夹之外提供“数据”目录,作为Access mdb数据库之类的安全场所。您无法直接浏览到站点根目录之外的目录。 ASP.NET通过引入App_Data来消除对这些事物的需求。您现在想要使用此类文件夹的唯一原因是,如果要在提供目录内容之前应用某种身份验证。然后你需要使用一个处理程序,或者一个简单的cshtml文件。您可以将WebSecurity帮助程序与WebImage帮助程序组合以首先对用户进行身份验证,然后在通过测试时检索并显示该图像。 src标记中的img将指向cshtml文件,其中包含查询字符串或UrlData值,以便您知道要显示的图像。

如果您不需要在显示图像之前验证用户,则将图像文件存储在根目录之外会增加不必要的复杂程度。