У меня есть веб-страница, которая позволяет пользователю загружать файл в общий сетевой ресурс. Когда я запускаю веб-страницу локально (в VS 2008) и пытаюсь загрузить файл, это работает ! Однако когда я развертываю веб-сайт на веб-сервере и пытаюсь загрузить файл через веб-страницу, он не работает !
Ошибка, возвращаемая мне на веб-сервере, гласит: «Доступ к пути« \ 05prd1 \ emp \ test.txt »запрещен. Поэтому, очевидно, это проблема с разрешениями.
Сетевой ресурс настроен так, чтобы разрешить полный доступ как ко мне (проверка подлинности NT), так и к СЕТИ СЕТИ (которая является учетной записью .NET по умолчанию и которую мы указали в нашем пуле приложений IIS в качестве пользователя по умолчанию для этого веб-сайта).
Я пробовал это с и без олицетворения на веб-сервере, и ни один из способов не работает, все же оба способа работают на моей локальной машине (другими словами, с и без олицетворения работает на моей локальной машине).
Код загрузки файла приведен ниже. Обратите внимание, что приведенный ниже код включает в себя олицетворение, но, как я уже говорил выше, я пробовал его с олицетворением и без него, и это не имело никакого значения.
if (fuCourses.PostedFile != null && fuCourses.PostedFile.ContentLength > 0) {
System.Security.Principal.WindowsImpersonationContext impCtx;
impCtx =
((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
try {
lblMsg.Visible = true;
// The courses file to be uploaded
HttpPostedFile file = fuCourses.PostedFile;
string fName = file.FileName;
string uploadPath = "\\\\05prd1\\emp\\";
// Get the file name
if (fName.Contains("\\")) {
fName = fName.Substring(
fName.LastIndexOf("\\") + 1);
}
// Delete the courses file if it is already on \\05prd1\emp
FileInfo fi = new FileInfo(uploadPath + fName);
if (fi != null && fi.Exists) {
fi.Delete();
}
// Open new file stream on \\05prd1\emp and read bytes into it from file upload
FileStream fs = File.Create(uploadPath + fName, file.ContentLength);
using (Stream stream = file.InputStream) {
byte[] b = new byte[4096];
int read;
while ((read = stream.Read(b, 0, b.Length)) > 0) {
fs.Write(b, 0, read);
}
}
fs.Close();
lblMsg.Text = "File Successfully Uploaded";
lblMsg.ForeColor = System.Drawing.Color.Green;
}
catch (Exception ex) {
lblMsg.Text = ex.Message;
lblMsg.ForeColor = System.Drawing.Color.Red;
}
finally {
impCtx.Undo();
}
}
Любая помощь по этому вопросу будет очень признателен!