1

所以我有一个 HTML 表单,用户可以在其中上传图像。这发布到我的操作中,图像被放入用户 ID 唯一的目录中(如果该目录不存在,则创建该目录)。

自从我大约两个月前实施它以来,它一直工作得很好,从那以后我就再也不用碰它了。最初,我UnauthorizedAccessExceptions通过进入上传目录的安全设置并授予“所有人”完全控制权来解决这个问题。

出乎意料的是,我再也无法保存图像了。UnauthorizedAccessExceptions尽管一次又一次地更改文件夹的安全设置以尝试修复它,但我开始再次出现问题。最后阅读有关在 ASP.net 中进行帐户模拟的信息。

所以,现在我没有得到UnauthorizedAccessExceptions,而是遇到了我的网站认为目录已经存在的问题。

这是我的表单操作的一个片段:

if (Directory.Exists(Path.GetDirectoryName(Server.MapPath("../uploads/" + currentUser.UserId))) == false)
{
   Directory.CreateDirectory(Path.GetDirectoryName("../uploads/" + currentUser.UserId));
}
if (Directory.Exists(Path.GetDirectoryName(Server.MapPath("../uploads/" + currentUser.UserId + "/" + newEntry.EntryId))) == false)
{
   Directory.CreateDirectory(Path.GetDirectoryName("../uploads/" + currentUser.UserId + "/" + newEntry.EntryId));
}

ImageFile.SaveAs(Server.MapPath("../" + savedFileName));

if 语句中的代码永远不会执行。所以,我删除了它们并简单地尝试:

Directory.CreateDirectory(Path.GetDirectoryName("../uploads/" + currentUser.UserId));

什么都没发生!然后,当需要保存图像时,由于目录不存在而引发异常!谁能告诉我为什么Directory.Exists()要返回true,或者为什么Directory.CreateDirectory()什么都不做?

或者为什么这段代码几个月都没有动过并且运行良好,然后突然决定放弃?

注意:如果我转到文件夹并手动创建目录,则文件保存得很好

4

3 回答 3

1

Path.GetDirectoryName 只返回目录名称而不是目录的完全限定路径。Directory.Exists 将获取目录的完全限定路径,然后检查目录是否存在。

如果 Directory.Exists 将在 Web 应用程序的根目录中检查该文件夹是否存在,而不是查看上传文件夹中的内容,则您的条件将失败。

你的情况应该是这样的:

if (Directory.Exists(Server.MapPath("/uploads/" + currentUser.UserId)) == false)
{
    Directory.CreateDirectory(Server.MapPath("/uploads/" + currentUser.UserId));
}

注意:从路径中删除了前导“..”并且它有效!

于 2012-05-05T07:07:53.933 回答
0

显然这就是我需要改变的全部:

Directory.CreateDirectory(Server.MapPath("../uploads/" + currentUser.UserId));

放入 Server.MapPath,现在一切正常。不知道为什么它之前工作正常,但突然停止了。

于 2012-05-05T07:26:28.797 回答
0

尝试这个:

var path = Server.MapPath(string.Format("~/uploads/{0}/{1}/", userId, entryId));

//MSDN: Creates all directories and subdirectories as specified by path
Directory.CreateDirectory(path);

var filePath = Path.Combine(path, savedFileName);

ImageFile.SaveAs(filePath );
于 2012-05-05T07:38:51.417 回答