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

flmtquvp  于 2022-11-19  发布在  .NET
关注(0)|答案(3)|浏览(141)

输了。
我有这样的代码:

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\'.

如果我导航到explorer中的路径,它会显示为正常。
我试图解决的是按用户在数据库中拥有的唯一GUID对用户上传进行排序。我希望文件夹“userfiles”的文件夹名为用户的GUID,并且在该文件夹中我有“mycoolpic.png”
知道我做错了什么吗?

ars1skjm

ars1skjm1#

您试图在没有提供文件名的情况下进行保存。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);
yws3nbqq

yws3nbqq2#

我在生产环境中遇到过这个问题,但在开发过程中没有。
我的问题是因为我省略了~符号。
我就从这:

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

更改为:

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

f0brbegy3#

在我的例子中,我通过Git与两个同事共享源代码,文件上传目录虽然在拉取时出现在同事的Visual Studio中,但在文件资源管理器中并不存在。所以我必须创建一个txt文件,将其添加到Git中,然后将其推送到远程存储库。当我的朋友拉取时,他们在Visual Studio和文件资源管理器中都存在该文件夹。这就解决了问题。

相关问题