访问上传​​excel文件时拒绝的路径

时间:2010-12-02 21:22:43

标签: c# asp.net asp.net-3.5

上传excel文件时,我收到此错误,有人可以帮助我吗?

  

访问路径   “C:\ DATA \ IronElements \上传\ AUMData \ 20101202   031815.xlsx'被拒绝。描述:期间发生了未处理的异常   当前网络的执行   请求。请查看堆栈跟踪   有关错误的更多信息   它起源于代码。

     

异常详细信息:   System.UnauthorizedAccessException的:   访问路径   “C:\ DATA \ IronElements \上传\ AUMData \ 20101202   031815.xlsx'被拒绝。

     

ASP.NET无权访问   请求的资源。考虑   授予对资源的访问权限   到ASP.NET请求标识。   ASP.NET具有基本进程标识   (通常是IIS 5上的{MACHINE} \ ASPNET   或IIS 6上的网络服务)   如果申请不是,则使用   冒充。如果申请是   冒充通过,身份   将是匿名用户(通常是   IUSR_MACHINENAME)或经过身份验证的   请求用户。

     

要授予对文件的ASP.NET访问权限,   在资源管理器中右键单击该文件,   选择“属性”并选择   安全选项卡。单击“添加”以添加   适当的用户或组。突出   ASP.NET帐户,并检查   用于所需访问的框。

     

来源错误:

     

生成了未处理的异常   在执行当前   网络请求。有关的信息   异常的起源和位置   可以使用例外来识别   堆栈跟踪下面。

我的代码隐藏文件具有以下语法

DateTime date = DateTime.Now;
                string FileName = Convert.ToString(date.ToString("yyyyMMdd hhmmss"));
                Directory.CreateDirectory("C:\\Data\\IronElements\\Upload\\AUMData\\Schema");
                doesFileExists("C:\\Data\\IronElements\\Upload\\AUMData\\Schema");
                fileUpload.PostedFile.SaveAs("C:\\Data\\IronElements\\Upload\\AUMData\\" + FileName + ".xlsx");
                System.Threading.Thread.Sleep(5000);
                string connectionString = WebConfigurationManager.ConnectionStrings["SQLConnection"].ConnectionString;
                SqlConnection SqlConnect = new SqlConnection(connectionString);

                try
                {
                    SqlConnect.Open();
                    SqlCommand cmdAssetUnderManagement = new SqlCommand("Exec_Insert_AUMAssetValue", SqlConnect);
                    cmdAssetUnderManagement.CommandType = CommandType.StoredProcedure;
                    cmdAssetUnderManagement.ExecuteNonQuery();

                }


                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
                finally
                {
                    SqlConnect.Close();
                }
                lblAUMTA.Visible = true;
                lblAUMTA.Text = "File Upload Completed";
            }
    private void doesFileExists(string p)
            {
                p = string.Concat(p, "\\AUMSchema.xlsx");
                if (!File.Exists(p))
                {
                    fileUpload.PostedFile.SaveAs("C:\\Data\\IronElements\\Upload\\AUMData\\Schema\\AUMSchema.xlsx");
                }
            }

4 个答案:

答案 0 :(得分:4)

确保文件夹C:\ Data \ IronElements \ Upload \ AUMData对IIS执行上下文的用户具有NTFS写入权限。另外,请确保C:\ Data \ IronElements \ Upload的子文件夹继承其父级的权限。为此,请单击安全选项卡中的高级按钮 - >更改权限 - >使用此对象的可继承权限替换所有子对象权限 - >点击确定

答案 1 :(得分:1)

运行您的网络会话的帐户无权写入该文件夹。一旦您向ASP.Net帐户(或您使用的任何帐户)提供所需的权限,它应该按预期工作。

答案 2 :(得分:1)

转到您用于此应用程序的应用程序池,并将其身份更改为“网络服务”。我面对类似的问题并以同样的方式修复

答案 3 :(得分:0)

为了更好地处理这样的权限问题,我总是创建一个低权限的用户来运行我们的网站。用户以网站本身命名,因此很明显它的用途。

然后该用户只能在正确的文件夹中获取权限,在您的情况下,C:\ Data \ IronElements \ Upload \ AUMData。这也是限制数据库访问的好方法 - 在SQL中为特定用户创建一个具有最小权限的登录。