我已将我的项目部署到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在上面关于允许用户上传到部署区域是否是个好主意的回答,可能有很多话要说。