Server.MapPath在Azure上找不到路径

时间:2015-11-18 14:05:23

标签: asp.net azure server.mappath

我已将我的项目部署到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);

我收到此错误消息:

  

无法找到路径的一部分   &#39; d:\家\站点\ wwwroot的\程序App_Data \ IMAGES \徽标10003065.jpg&#39;

如何将文件保存到&#34; App_Data \ Images \&#34;

7 个答案:

答案 0 :(得分:4)

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

编辑:

正如其他人在这里写的那样(@Spectarion)。我将在这里提出解释为什么没有创建文件夹的重要说明:

  

仅为未来的读者,如果文件夹为空,则不会创建该文件夹。   即使存在未包含的文件,文件夹也是空的   项目

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

也许这个:

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

答案 4 :(得分:0)

也许图像文件夹不存在,您需要先创建它吗?虽然我不建议在您的应用中保存图片,如果它是专为上传图片的人设计的。我会通过blob或新的Azure文件存储将它们保存在Azure存储中。我会保持您的应用部署文件与您的应用无关,并将所有用户生成的内容保存在其中。

BTW,如果您使用的是Azure Web Apps,则可以使用&#34; HOME&#34;的环境变量。总是得到正确的路径(应该是D:\ home)

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

答案 5 :(得分:0)

我假设您的AppData文件夹位于wwwroot文件夹下,通常就是这种情况。

试试这个:

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

答案 6 :(得分:0)

我在VS15上遇到了这个问题。我首先按照this question中的建议来生成您所获得的错误。我猜这是dsb的部分答案,但是dsb没有给出任何解释实际修复过程的描述。

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

这就是错误抛出的原因。所以,我接着解决了这个问题,只需转到解决方案资源管理器,右键单击App_Data并选择“发布App_Data”。

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