次のコードを使用して、イメージを IIS 6 (Windows 2003 Server) サイトにアップロードしようとしています。
[HttpPost]
public ActionResult Edit(Empresas empresas)
{
Empresas e = db.Empresas.Where(em => em.Id == empresas.Id).First();
e.NombreEmpresa = empresas.NombreEmpresa;
HttpPostedFileBase archivoBanner = Request.Files["Banner"];
HttpPostedFileBase archivoLogo = Request.Files["Logo"];
string directorioUpload = Server.MapPath("~/Images/" + e.CodigoEmpresa);
if (!Directory.Exists(directorioUpload))
{
Directory.CreateDirectory(directorioUpload);
}
if (archivoBanner != null)
{
if (archivoBanner.ContentLength > 0)
{
var fileUpload = Path.Combine(directorioUpload, archivoBanner.FileName);
archivoBanner.SaveAs(fileUpload);
e.Banner = archivoBanner.FileName;
}
}
if (archivoLogo != null)
{
if (archivoLogo.ContentLength > 0)
{
var fileUpload = Path.Combine(directorioUpload, archivoLogo.FileName);
archivoLogo.SaveAs(fileUpload);
e.Logo = archivoLogo.FileName;
}
}
if (ModelState.IsValid)
{
db.Entry(e).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(e);
}
自分の PC (Windows 8、IE10、Chrome 29) から、または Chrome を使用してサーバーから読み込む場合、問題はありません。IE8 を使用してサーバーからロードすると、「archivoBanner.SaveAs(fileUpload);」で System.UnauthorizedAccessException がスローされ、アプリケーションがソース イメージを読み取れないことが示されます。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.UnauthorizedAccessException: 'C:\Documents and Settings\user\My Documents\Imagenes\banner.png' にアクセスしてください。
ASP.NET は、要求されたリソースへのアクセスを許可されていません。リソースへのアクセス権を ASP.NET 要求 ID に付与することを検討してください。ASP.NET には、アプリケーションが偽装されていない場合に使用されるベース プロセス ID (通常、IIS 5 または IIS 6 および IIS 7 のネットワーク サービスの {MACHINE}\ASPNET、および IIS 7.5 の構成済みアプリケーション プール ID) があります。アプリケーションが を介して偽装している場合、ID は匿名ユーザー (通常は IUSR_MACHINENAME) または認証された要求ユーザーになります。
ファイルへの ASP.NET アクセスを許可するには、エクスプローラーでファイルを右クリックし、[プロパティ] を選択して、[セキュリティ] タブを選択します。[追加] をクリックして、適切なユーザーまたはグループを追加します。ASP.NET アカウントを強調表示し、必要なアクセスのボックスをオンにします。
ソース エラー:
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
[UnauthorizedAccessException: Access denegado a la ruta de acceso 'C:\Documents and Settings\user\My Documents\Imagenes\banner.png'.] System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) +12898791 System.IO .FileStream.Init(文字列パス、FileMode モード、FileAccess アクセス、Int32 権限、Boolean useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath) +2481
System.IO.FileStream.. ctor(文字列パス、FileMode モード、FileAccess アクセス、FileShare 共有、Int32 bufferSize、FileOptions オプション、文字列 msgPath、ブール値 bFromProxy) +229 System.IO.FileStream..ctor(文字列パス、FileMode モード) +106 System.Web.HttpPostedFile .SaveAs(文字列ファイル名) +295
System.Web.Mvc.ReflectedActionDescriptor.Execute( ControllerContext
controllerContext, IDictionary 2 パラメーター) +39 System.Web.Mvc.Async.<>c_ DisplayClass39.b _33() +125 System.Web.Mvc.Async.<>c_ DisplayClass4f.b _49() +452 System.Web.Mvc. Async.<>c_ DisplayClass37.b _36(IAsyncResult asyncResult) +15 System.Web.Mvc.Async.<>c_ DisplayClass2a.b _20() +31 System.Web.Mvc.Async.<>c_ DisplayClass25.b _22( IAsyncResult asyncResult) +2302 parameters) +248
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
System.Web.Mvc.<>c_ DisplayClass1d.b _18(IAsyncResult asyncResult) +28
System.Web.Mvc.Async.<>c_ DisplayClass4.b _3(IAsyncResult ar) +20 System.Web.Mvc.Controller.EndExecuteCore( IAsyncResult asyncResult) +53
System.Web.Mvc.Async.<>c_ DisplayClass4.b _3(IAsyncResult ar) +20
System.Web.Mvc.<>c_ DisplayClass8.b _3(IAsyncResult asyncResult) +42
System.Web.Mvc .Async.<>c_ DisplayClass4.b _3 (IAsyncResult ar) +20
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) + 375
宛先フォルダーのアクセス許可を変更しようとしましたが、前述のように、ファイルの書き込みではなく読み取りでエラーが発生します。そのため、ファイルのアクセス許可を変更しようとしましたが、同じ結果になりました。
手伝ってくれませんか?