ファイルをアップロードするフォームを持つ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>