【发布时间】:2013-09-12 20:09:12
【问题描述】:
我正在尝试使用以下代码将图像上传到 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,说应用程序无法读取源图像:
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.UnauthorizedAccessException:Acceso denegado a la ruta de acceso 'C:\Documents and Settings\user\My 文档\Imagenes\banner.png'。
ASP.NET 无权访问请求的资源。考虑 向 ASP.NET 请求授予对资源的访问权限 身份。 ASP.NET 有一个基本进程标识(通常 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 和 IIS 7 上的网络服务,以及 IIS 7.5 上配置的应用程序池标识),如果 该应用程序不是模拟的。如果应用程序是 冒充 via ,身份将是 匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的用户 请求用户。
要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件, 选择“属性”并选择“安全”选项卡。点击“添加”添加 适当的用户或组。突出显示 ASP.NET 帐户,然后 选中所需访问权限的复选框。
来源错误:
在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈跟踪:
[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 选项,SECURITY_ATTRIBUTES secAttrs, 字符串 msgPath,布尔 bFromProxy,布尔 useLongPath) +2481
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess 访问、FileShare 共享、Int32 bufferSize、FileOptions 选项、字符串 msgPath,布尔 bFromProxy)+229 System.IO.FileStream..ctor(字符串 路径,FileMode 模式)+106 System.Web.HttpPostedFile.SaveAs(String 文件名)+295
SistemaSolicitudes.Controllers.EmpresasController.Edit(Empresas empresas) 在 D:...\Controllers\EmpresasController.cs:73 lambda_method(闭包, ControllerBase, Object[]) +127
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary2 parameters) +2482 参数)+39
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
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) +230
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 异步结果)+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
我已尝试更改目标文件夹的权限,但正如我所说,写入文件没有错误,但读取它。因此,我尝试更改文件权限,结果相同。
你能帮帮我吗?
【问题讨论】:
-
您是否尝试从用户文件夹之外的文件夹上传文件?例如,从 C:\
-
是的,结果是一样的。
标签: c# entity-framework asp.net-mvc-4 iis internet-explorer-8