【问题标题】:Save file in a folder above the site files将文件保存在站点文件上方的文件夹中
【发布时间】:2011-07-01 21:02:32
【问题描述】:

我的主机有以下结构:

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

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

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

【问题讨论】:

    标签: asp.net razor root webmatrix mappath


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 但是如何关联图片 甚至
    • 您需要创建一个处理程序来呈现图像。 dotnetperls.com/ashx
    【解决方案2】:

    您可以使用 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 帮助器结合起来,首先验证用户,然后在他们通过测试时检索并显示图像。 img 标记中的 src 将指向 cshtml 文件,带有查询字符串或 UrlData 值,以便您知道要显示哪个图像。

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

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 2017-11-07
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多