Получение исключения, пытающегося загрузить и сохранить загрузку файла на удаленном сервере, но локальное окно в порядке - PullRequest
0 голосов
/ 05 января 2010

У меня есть приложение asp.net mvc, которое имеет форму, которая загружает файл. На моем локальном компьютере, конечно, он работает нормально, но когда я запускаю его на удаленном веб-сервере, я получаю эту ошибку:

Сведения об исключении: System.UnauthorizedAccessException: Доступ к пути «C: \ directory \ mytestfile.csv» запрещен.

ASP.NET не авторизован для доступа к запрошенному ресурсу. Рассмотрите возможность предоставления прав доступа к ресурсу для удостоверения запроса ASP.NET. ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET в IIS 5 или Network Service в IIS 6), который используется, если приложение не олицетворяет собой. Если приложение олицетворяет себя с помощью идентификатора, идентификатором будет анонимный пользователь (обычно IUSR_MACHINENAME) или аутентифицированный пользователь запроса.

Чтобы предоставить ASP.NET доступ к файлу, щелкните правой кнопкой мыши файл в проводнике, выберите «Свойства» и перейдите на вкладку «Безопасность». Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу. Выделите учетную запись ASP.NET и установите флажки для нужного доступа.

Ошибка источника: Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

моя проблема в том, что я заранее не знаю, какой файл будет загружен (таким образом, средство выбора файлов на экране загрузки), поэтому я не могу предварительно авторизовать его.

вот мой код:

Действие контроллера:

 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>

1 Ответ

2 голосов
/ 05 января 2010

Предоставьте процессу ASP.NET право на запись в папку , в которую вы будете загружать файлы. Следуйте тем же рекомендациям, изложенным в сообщении об ошибке, чтобы выполнить это, выполняйте только операции на уровне папки.

...