52

我有一个将文件上传到 Web 服务器上的特定文件夹的 asp.net web 应用程序。本地一切正常,但是当我将应用程序部署到 Web 服务器时,我开始收到错误“访问路径“D:\Attachments\myfile.doc”被拒绝”。我向“IIS AppPool”用户提供了应用程序在文件夹的完全权限下运行。我什至给了“每个人”完全权限,但出现了同样的错误。

我将该文件夹添加到防病毒软件的例外列表中,但结果相同。我开始怀疑 Windows Server 2008 R2 可能需要一个技巧才能让我的上传工作。我真的很感谢你的帮助。

谢谢

4

9 回答 9

82

右键单击服务器或本地计算机上的文件夹并授予完全权限

IIS_IUSRS

就是这样。

于 2014-02-01T13:13:14.063 回答
47

您的 asp.net 帐户{MACHINE}\ASPNET没有对该位置的写入权限。这就是它失败的原因。

考虑向 ASP.NET 请求标识授予对资源的访问权限。

右键单击下载文件夹Properties > Security Tab > Edit > Add > locations > choose your local machine > click OK > Type ASPNET below "Enter the object name to select" > Click Check Names 选中所需访问权限 ( Full Control) 的复选框。如果它不适合你做同样的Network Service

现在这应该显示您的本地{MACHINENAME}\ASPNET帐户,然后您将写入权限设置为此帐户。

否则,如果应用程序通过 模拟<identity impersonate="true"/>,则身份将是匿名用户(通常IUSR_MACHINENAME)或经过身份验证的请求用户。


或者只是使用专用位置在 ASP.NET 中存储文件,即App_Data. 要创建它,请右键单击您的 ASP.NET 项目(在 Visual Studio 中)Add > Add ASP.NET Folder > App_Data。然后您就可以将数据保存到此位置:

var path = Server.MapPath("~/App_Data/file.txt");
System.IO.File.WriteAllText(path, "Hello World");
于 2013-11-01T09:52:20.963 回答
12

问题可能是networkservice没有读取权限

致敬:

右键单击您的上传文件夹-> poperty 的-> 安全性-> 编辑-> 添加-> 键入:网络服务-> 复选框完全控制允许-> 按确定或应用

于 2013-11-01T09:56:46.200 回答
2

如果有人偶然发现这是谷歌的第一个结果,

记得在 SaveAs 方法中也指定文件名。

不会工作

file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation));

你需要这个:

filename = Path.GetFileName(file_upload.PostedFile.FileName);
file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation + "\\" + filename));

我假设 SaveAs 方法会自动使用上传的文件名。不断收到“拒绝访问”错误。不是很能描述实际问题

于 2016-08-16T11:29:08.933 回答
2

我曾经遇到过这个问题,在我的情况下,解决方案是关闭任务管理器中使用/访问该文件的任何进程

于 2016-11-29T11:08:57.927 回答
1

您是否查看过高级安全设置?

如下图所示,将文件夹的权限更改为 IIS_IUSRS

在此处输入图像描述

于 2016-08-16T13:25:27.010 回答
1

我知道这对游戏来说已经很晚了,但我想分享一下,以防它对某人有所帮助。

您的确切情况可能不适用,但是我有类似的情况并且设置 File 属性有所帮助。

尝试将 File 属性设置为 Normal:

var path = Server.MapPath("~/App_Data/file.txt");
File.SetAttributes(path, FileAttributes.Normal);
System.IO.File.WriteAllText(path, "Hello World");

我希望这可以帮助别人。

于 2017-08-17T20:46:49.650 回答
0

验证您要写什么。我遇到了同样的问题,但我意识到我正在尝试编写一个长度为 0 的字节数组。

这对我来说没有意义,但我得到:“访问路径”

于 2020-11-03T17:54:57.177 回答
-5

转到根文件夹

右键单击,单击属性

选择标签安全

点击编辑

点击添加

输入“每个人”

点击确定

签出完全控制

点击确定

于 2017-06-15T06:49:29.147 回答