0

ファイルをアップロードするフォームを持つasp.net mvcアプリがあります。もちろん、私のローカルボックスでは問題なく動作しますが、リモートWebサーバーで実行すると、次のエラーが発生します。

例外の詳細: System.UnauthorizedAccessException: パス 'C:\directory\mytestfile.csv' へのアクセスが拒否されました。

ASP.NET は、要求されたリソースへのアクセスを許可されていません。リソースへのアクセス権を ASP.NET 要求 ID に付与することを検討してください。ASP.NET には、アプリケーションが偽装していない場合に使用されるベース プロセス ID (通常、IIS 5 では {MACHINE}\ASPNET、IIS 6 ではネットワーク サービス) があります。アプリケーションが を介して偽装している場合、ID は匿名ユーザー (通常は 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 に答える