SaveAs 方法被配置为需要有根路径,而路径 <blah> 是没有根的

Posted

技术标签:

【中文标题】SaveAs 方法被配置为需要有根路径,而路径 <blah> 是没有根的【英文标题】:The SaveAs method is configured to require a rooted path, and the path <blah> is not rooted 【发布时间】:2010-05-14 04:28:54 【问题描述】:

好的,我见过一些人遇到这个问题 - 但我已经在使用文件路径,而不是相对路径。我的代码在我的 PC 上运行良好,但是当另一个开发人员上传图片时,他们会收到此错误。我认为这是文件夹上的安全权限 - 但系统帐户对文件夹具有完全访问权限(尽管我对如何测试应用程序在哪个帐户下运行感到困惑)。通常在本地运行也不会经常给您带来太多安全问题:)

一个代码sn-p:

        Guid fileIdentifier = Guid.NewGuid();
        CurrentUserInfo currentUser = CMSContext.CurrentUser;
        string identifier = currentUser.UserName.Replace(" ", "") + "_" + fileIdentifier.ToString();
        string fileName1 = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName);
        string Name = System.IO.Path.GetFileNameWithoutExtension(fileName1);
        string renamedFile = fileName1.Replace(Name, identifier);
        string path = ConfigurationManager.AppSettings["MemberPhotoRepository"];

        String filenameToWriteTo = path + currentUser.UserName.Replace(" ", "") + fileName1;
        fileUpload.PostedFile.SaveAs(filenameToWriteTo);

我的配置设置值在哪里:

这又在我的电脑上运行良好! (我检查了其他人在他们的 PC 上是否有该文件夹)。

任何建议将不胜感激 - 谢谢:)

【问题讨论】:

【参考方案1】:

显然它所说的是您的 filenameToWriteTo 不是根路径...即它是相对路径,而您的服务器配置不喜欢那样。使用Server.MapPath 获取真实路径...类似于...

string realPhysicalPath = Path.Combine(Server.MapPath(" "), filenameToWriteTo);
fileUpload.PostedFile.SaveAs(realPhysicalPath);

以防万一打印出您的 filenameToWriteTo 以查看其相对路径还是物理路径。如果是相对的,请使用上述方法。

【讨论】:

谢谢 - 但我的配置值是一个物理文件路径 - 所以它是一个真实的路径。抱歉,复制粘贴失败,所以它包含物理文件路径并不明显:)【参考方案2】:

不确定是什么问题,因为它自行解决了。我们最终没有调试它,因为它是在非开发人员的 PC 上,我有一个解决方法让他继续他的工作,同时我调查潜在的原因。因此,他更新/运行网站或文件权限的方式可能是通过获取我的目录的副本来修复的。

至少我知道它需要物理文件路径,所以希望不会再遇到这种情况!

【讨论】:

【参考方案3】:

请确保您保存文件的文件夹存在。如果文件夹不存在,则不会为您创建它,并且 SaveAs 方法将抛出您现在遇到的异常。

谢谢。

【讨论】:

以上是关于SaveAs 方法被配置为需要有根路径,而路径 <blah> 是没有根的的主要内容,如果未能解决你的问题,请参考以下文章

SaveAs方法配置为需要根路径,路径'fp'不是root

文件上传以及JS链式结构

点分治

点分治

我想弹出我自己的对话框(将文件保存在服务器上而不询问目标路径位置)而不是 adobe 的另存为对话框

IDEAIDEA中配置tomcat虚拟路径的两种方法