0

我正在尝试将图像文件保存在我的 WebApplication 文件夹中,但它不起作用这是目录映射

wwwroot
  -
  -
  -----RegApp
  -      -
  -      ----Images
  -
  -
  -----RegService

我正在将文件保存WebService(RegService)WebApp(RegApp)目录中这是来自 WebService 的代码

File.WriteAllBytes(Server.MapPath("../RegApp//Images//" + Email + ".jpeg"), Convert.FromBase64String(PictureByteString));

但它给了我这个

System.Web.HttpException: Cannot use a leading .. to exit above the top directory.
   at System.Web.Util.UrlPath.ReduceVirtualPath(String path)
   at System.Web.Util.UrlPath.Reduce(String path)
   at System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative)
   at System.Web.VirtualPath.Combine(VirtualPath relativePath)
   at System.Web.HttpRequest.MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, Boolean allowCrossAppMapping)
   at System.Web.HttpRequest.MapPath(VirtualPath virtualPath)
   at System.Web.HttpServerUtility.MapPath(String path)
4

2 回答 2

0

终于通过使用虚拟目录找到了一种简单的方法..现在我正在使用C:\Images服务器的文件夹来存储它们的图像webService,并将图像文件夹添加到WebApp虚拟文件夹中,因此存储在C:\Images文件夹中的任何内容都可以在WebApp\Images文件夹中使用...

于 2014-04-08T10:14:32.027 回答
0

我想问题是在 MapPath 中使用“../”,解决方法是调用 MapPath(“.”),然后使用 System.IO 类去任何你想去的地方。

string baseDir = Server.MapPath(".");
string imageName = Directory.GetParent(baseDir).FullName + "/RegApp//Images//" + Email + ".jpeg";

File.WriteAllBytes(imageName, Convert.FromBase64String(PictureByteString));

另一种解决方案是将物理目录位置存储在配置键中,并完全放弃 MapPath。

在这两种情况下,您都必须有权访问该目录。

于 2014-04-07T12:33:22.873 回答