2010-04-16 2 views
0

У меня есть страница aspx с несколькими элементами управления FileUpload и одна кнопка «Загрузить». В обработчик щелчка я сохранить файлы, как это:HttpPostedFile.SaveAs() выбрасывает UnauthorizedAccessException, даже если файл сохраняется?

string path = "..."; 
for (int i = 0; i < Request.Files.Count - 1; i++) 
{ 
    HttpPostedFile file = Request.Files[i]; 
    string fileName = Path.GetFileName(file.FileName); 
    string saveAsPath = Path.Combine(path, fileName); 
    file.SaveAs(saveAsPath); 
} 

Когда file.SaveAs() называется, он бросает:

System.Web.HttpUnhandledException: Исключение типа 'System.Web.HttpUnhandledException' был брошен. ---> System.UnauthorizedAccessException: Доступ к трассе '...' отрицается. в System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath) на System.IO.FileStream.Init (Строка пути, режим FileMode, FileAccess доступа, Int32 прав, булевы useRights, Обменник акций, Int32 BufferSize , FileOptions варианты, SECURITY_ATTRIBUTES secAttrs, Строка msgPath, Boolean bFromProxy) в System.IO.FileStream..ctor (String путь, режим FileMode, FileAccess доступа, Обменник доля, Int32 BufferSize, опции FileOptions, Строка msgPath, Boolean bFromProxy)
на System.IO.FileStr eam..ctor (String путь, режим FileMode) при System.Web.HttpPostedFile.SaveAs (Строка файла) при Belden.Web.Intranet.Iso.Complaints.AttachmentUploader.btnUpload_Click (Объект отправителя, EventArgs е) в System.Web.UI.WebControls.Button.OnClick (EventArgs е) в System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) в System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler SourceControl , String eventArgument)
at System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- Конец внутренней трассировки стека исключений --- в System.Web.UI.Page.HandleError (исключение е) при System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, булева includeStagesAfterAsyncPoint) при System.Web.UI.Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, булева includeStagesAfterAsyncPoint) при System.Web.UI.Page.ProcessRequest()
на System.Web.UI.Page.ProcessRequest (HttpContext ) в ASP.departments_ iso_complaints_uploadfiles_aspx.ProcessRequest (HttpContext контекст) на System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() в System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, булева & completedSynchronously)

Теперь вот забавная часть. Файл сохранен правильно! Так почему это бросает это исключение?

Update

Я установил ее, проверяя, не равного нулю ContentLength:

string path = "..."; 
for (int i = 0; i < Request.Files.Count - 1; i++) 
{ 
    HttpPostedFile file = Request.Files[i]; 
    if (file.ContentLength == 0) 
    { 
     continue; 
    } 

    string fileName = Path.GetFileName(file.FileName); 
    string saveAsPath = Path.Combine(path, fileName); 
    file.SaveAs(saveAsPath); 
} 
+0

Попробуйте удалить/перемещение файла с того места, где оно сохраняется, и загрузить его снова. В этом случае ошибка все еще возникает? – shahkalpesh

+0

Я только что повторил код ... Ошибка произошла, когда один из элементов управления FileUpload не имел пути. Он по-прежнему создает экземпляр HttpPostedFile, но ContentLength равен 0, а FileName пуст. Doh! – jrummell

ответ

1

Я установил ее, проверяя, не равный нулю ContentLength:

string path = "..."; 
for (int i = 0; i < Request.Files.Count - 1; i++) 
{ 
    HttpPostedFile file = Request.Files[i]; 
    if (file.ContentLength == 0) 
    { 
     continue; 
    } 

    string fileName = Path.GetFileName(file.FileName); 
    string saveAsPath = Path.Combine(path, fileName); 
    file.SaveAs(saveAsPath); 
} 

Иногда его простые вещи, которые я ... выхожу

1

Интересно ... мой первый вопрос, вы абсолютно уверен, что на самом деле линия код, который бросает исключение?

Два ... уходит ли, если вы (временно) предоставляете каждому доступ к этому пути?

Ваши права сейчас заданы сейчас? Какой пользователь работает ASP.NET? Вы используете олицетворение?

2

пытается использовать

file.SaveAs(server.mappath(saveAsPath));

Смежные вопросы