Server.MapPath在Azure上找不到路径



我已将我的项目部署到Azure。在我的项目中,我有"App_Data\Images"文件夹。

现在我正在尝试以下操作:

String filename = GLOBAL_IMAGES_VALS.GET_FILE_PREFIX(imageType) + "-" + User.Identity.GetUserId<int>().ToString() + Path.GetExtension(image.FileName);
String origPath = Server.MapPath("~\App_Data")+"\Images\"  + filename;

但在尝试之后:

image.SaveAs(origPath);

我收到这个错误消息:

找不到路径的一部分"D:\home\site\wwwroot\App_Data\Images\logo-10003065.jpg".

如何将文件保存到"App_Data\Images\"

实际问题是子文件夹"Images"不存在。我不记得为什么发布过程没有创建这个子文件夹,但我手动添加了它,然后一切都很好。

编辑:

正如其他人在这里所写的(@Spectation)。我将在这里放一句重要的话,解释为什么文件夹没有创建:

只是为了将来的读者,如果文件夹是空的,就不会创建它。即使存在未包含在中的文件,文件夹也是空的项目

只需将一些"fake.txt"文件放入任何你想确保它会被创建的文件夹中,当然也不要忘记将其添加到项目中。祝你好运

由于在特定文件夹中没有任何文件,因此在发布Web部署时会忽略空文件夹。

快速修复:在发布之前将任何文件添加到文件夹将解决此问题。

if (!Directory.Exists(Server.MapPath("~/Images")))
{                
      Directory.CreateDirectory(Server.MapPath("~/Images"));
}

文件夹中可能缺少该目录。创建目录并在文件路径中使用

也许这个:

System.Web.Hosting.HostingEnvironment.MapPath("~\App_Data")+"\Images\"  + filename )

也许images文件夹不存在,您需要先创建它?尽管我不建议这样在你的应用程序中保存图像,如果它是为上传图像的人设计的。我会通过Blob或新的Azure文件存储将它们保存在Azure存储中。我会保持你的应用程序部署文件干净,只与你的应用相关,并保存任何用户生成的内容。

顺便说一句,如果你正在使用Azure Web应用程序,你可以使用"HOME"的环境变量来始终获得正确的路径(应该是D:\HOME)

string path = Environment.GetEnvironmentVariable("HOME") +
                           "\site\wwwroot\App_Data\images"

我假设您的AppData文件夹就在wwwroot文件夹下,通常就是这样。

试试这个:

HttpContext.Current.Server.MapPath(Path.Combine("~/AppData/Images/", filename));

我刚刚在VS15上遇到了这个问题。我首先遵循了这个问题中的建议,以便生成您所得到的错误。我猜这是dsb的答案,但dsb没有给出任何关于修复这个问题的实际过程的描述。

然后我转到https://<mywebsite>.scm.azurewebsites.net/DebugConsole查看目录,发现App_Data尚未发布

这就是为什么会出现错误。因此,我只需转到解决方案资源管理器,右键单击App_Data并选择"Publish App_Data"即可解决此问题。

然而,我的网站是一个项目的短期学术努力-我认为考虑到Matt Watsons在上面关于允许用户上传到部署区域是否是个好主意的回答,可能有很多话要说。

相关内容

  • 没有找到相关文章

最新更新