找不到路径C#asp.net的一部分,路径就在那里

时间:2014-02-10 20:57:03

标签: c# asp.net

忘记。

我有这段代码:

public ActionResult UploadCV(string userId, HttpPostedFileBase cvfile)
    {
        if (cvfile != null && cvfile.ContentLength > 0)
        {                
            var bareFilename = Path.GetFileNameWithoutExtension(cvfile.FileName);
            var fileExt = Path.GetExtension(cvfile.FileName);
            //save to dir first
            var path = Path.Combine(Server.MapPath("/App_Data/userfiles/"),
                                    userId + "/");
            var dir = Directory.CreateDirectory(path);
            cvfile.SaveAs(path);
            //save to db..
            var user = Ctx.Users.FirstOrDefault(x => x.Id == userId);
            user.CvLocation = "/App_Data/userfiles/" + userId + "/" + bareFilename + fileExt;
            user.CvUploadDate = DateTime.Now;
            Ctx.SaveChanges();

        }
        return RedirectToAction("Index", "Settings", new { area = "" });
    }

就行:

cvfile.SaveAs(path);

我收到错误

Could not find a part of the path 
'C:\Users\me\big\ol\path\App_Data\userfiles\4cf86a2c-619b-402a-80db-cc1e13e5288f\'.

如果我导航到资源管理器中的路径,它会很好。

我要解决的是按用户在数据库中的唯一GUID对用户上传进行排序。我希望文件夹'userfiles'具有用户guid的文件夹名称,并且在该文件夹中我有'mycoolpic.png'

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

您正在尝试保存而不提供文件名。 HttpPostedFileBase.SaveAs需要一个表示文件名的参数,而不仅仅是路径。 只需将服务器path与之前提取的bareFilename结合使用即可。

 var path = Path.Combine(Server.MapPath, "/App_Data/userfiles/"),userId);
 var dir = Directory.CreateDirectory(path);
 cvfile.SaveAs(Path.Combine(path, bareFilename);

答案 1 :(得分:1)

我在生产环境中遇到了这个问题,但在开发过程中却没有。

我的问题是因为我忽略了~符号。

我离开了这个:

var path = Server.MapPath("/App_Data/templates/registration.html");

到此:

var path = Server.MapPath("~/App_Data/templates/registration.html");