我正在尝试使用以下代码将图像上传到 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: Acceso denegado a la ruta de acceso 'C:\Documents and Settings\user\My Documents\Imagenes\banner.png'。
ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限。ASP.NET 有一个基本进程标识(通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 和 IIS 7 上的网络服务,以及 IIS 7.5 上配置的应用程序池标识),如果应用程序不是模拟的,则使用该标识。如果应用程序通过 模拟,则身份将是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的请求用户。
要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件,选择“属性”并选择“安全”选项卡。单击“添加”以添加相应的用户或组。突出显示 ASP.NET 帐户,然后选中所需访问权限的复选框。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[UnauthorizedAccessException: Acceso 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(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) +2481
System.IO.FileStream.. ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +229 System.IO.FileStream..ctor(String path, FileMode mode) +106 System.Web.HttpPostedFile .SaveAs(字符串文件名)+295
SistemaSolicitudes.Controllers.EmpresasController.Edit(Empresas empresas) 在 D:...\Controllers\EmpresasController.cs:73 lambda_method(Closure, ControllerBase, Object[]) +127
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
系统。 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
我尝试更改目标文件夹的权限,但正如我所说,写入文件没有错误,但读取它。因此,我尝试更改文件权限,结果相同。
你能帮我么?