У меня есть страница aspx с несколькими FileUpload
элементами управления и одна кнопка загрузки. В обработчике кликов я сохраняю файлы так:
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, логические права использования,
Общий доступ к FileShare, размер буфера Int32,
Опции FileOptions,
SECURITY_ATTRIBUTES secAttrs, String
msgPath, Boolean bFromProxy) в
System.IO.FileStream..ctor (String
путь, режим FileMode, FileAccess
доступ, общий доступ к FileShare, Int32
bufferSize, параметры FileOptions,
Строка msgPath, логическое bFromProxy)
at System.IO.FileStream..ctor (String
путь, режим FileMode) в
System.Web.HttpPostedFile.SaveAs (String
имя файла) в
Belden.Web.Intranet.Iso.Complaints.AttachmentUploader.btnUpload_Click (Объект
отправитель, EventArgs e) в
System.Web.UI.WebControls.Button.OnClick (EventArgs
есть
System.Web.UI.WebControls.Button.RaisePostBackEvent (String
eventArgument) в
System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler
sourceControl, String eventArgument)
в
System.Web.UI.Page.ProcessRequestMain (Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) ---
Конец внутренней трассировки стека исключений ---
в
System.Web.UI.Page.HandleError (Exception
есть
System.Web.UI.Page.ProcessRequestMain (Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) в
System.Web.UI.Page.ProcessRequest (Boolean
includeStagesBeforeAsyncPoint, Boolean
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
шаг, логическое и завершено синхронно)
Теперь вот самое интересное. Файл сохранен правильно! Так почему же это исключение?
Обновление
Я исправил это, проверив ненулевое 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);
}