0

我有一个 asp.net mvc 应用程序,它有一个上传文件的表单。在我的本地机器上,它当然可以正常工作,但是当我在远程网络服务器上运行它时,我得到了这个错误:

异常详细信息:System.UnauthorizedAccessException:对路径“C:\directory\mytestfile.csv”的访问被拒绝。

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

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

源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

我的问题是我事先不知道要上传的文件是什么(因此上传屏幕中的文件选择器)所以我不能预先授权它。

这是我的代码:

控制器动作:

 public ActionResult UploadSpreadsheet(HttpPostedFileBase file)
    {

        var fileName = Path.Combine(Request.MapPath("~/App_Data"), Path.GetFileName(file.FileName));
        file.SaveAs(fileName);  //This is what blows up . . .

        using (CsvReader csv = new CsvReader(new StreamReader(fileName_), true))
        {
            string[] headers = csv.GetFieldHeaders();
          . . . .

查看表格:

<form action="/Resources/UploadSpreadsheet" method="post" id="spreadsheetForm" enctype="multipart/form-data">
<fieldset class=outerFieldSet>
<div class="legendTitle">Sync with Spreadsheet</div><hr /><br /><br />

    <label>Choose Spreadsheet: </label><input size="88" class="required" type="file" name="file" />
</fieldset>

<input type="submit" class=longButton value="Syncronize Resource Data" />
</form>
4

1 回答 1

2

授予 ASP.NET 进程对您将上传文件的文件夹的写入权限。请遵循错误消息中概述的相同准则来完成此操作,仅在文件夹级别执行操作。

于 2010-01-05T16:33:17.030 回答