【发布时间】:2012-02-14 03:43:06
【问题描述】:
我已经在互联网上浏览了 3 个小时,正在寻找解决我的问题的方法,我开始怀疑是否有其他人遇到过这个确切的问题?
我正在使用 IIS7 来托管一个网站,该网站在我们办公室周围做一些本地事情。好吧,开发网站一切正常,但现在我正在托管该网站,我不能(也不能其他任何人为此)单击链接以下载所需的文件。 (让我们假装他们点击一个链接从网络服务器下载一些随机文件)
嗯,它下载文件失败,我猜是权限错误。我一直在寻找解决方案,但似乎找不到。我对 IIS7 知之甚少,所以我对应用程序池标识的东西不太了解,尽管我确实设法授予该标识对文件/文件夹的完全访问权限。无论如何,这是它搞砸的特定区域..
这是从 .cs 文件调用函数的 default.cshtml 页面的一部分: //嗯..非常接近确切的东西,只是摆脱了一堆不必要的垃圾
@{
string tmp = Functions.downloadFile(fileName)
}
<html>
tmp
</html>
这是 .cs 文件中实际将文件下载到桌面的部分
public static string downloadFile(string fileName) //i know this example doesnt
//use filename, but the original code does.
{
if (Directory.Exists("C:\WebSite\thingsToDownload"))
{
string[] files = Directory.GetFiles("C:\WebSite\thingsToDownload");
foreach (string s in files)
{
string[] tmp = s.Split('\\');
try
{
File.Copy(s,
Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
+ "\\" + tmp[tmp.Length - 1]);
}
catch (Exception e)
{
return "ERROR COPYING: " + e.Message;
}
}
return "GOOD";
}
return "DIRECTORY DOESNT EXIST";
}
说完之后,我得到“错误复制:对路径 '\fileName' 的访问被拒绝。
我的猜测是网络服务器无权访问此人的桌面以将文件放在那里。 如果有人能阐明并帮助我得到这个,将不胜感激!
【问题讨论】:
-
您正在尝试将文件写入服务器的桌面(或
fileName可能指向的其他位置)。使用Response.WriteFile。 -
这段代码是否应该允许用户下载任何东西?似乎在服务器上的两个文件夹之间复制了一个文件。问题可能源于
Environment.GetFolderPath为LocalSystem(或您的池运行的任何用户)返回一个空路径,但这并不能改变整个方法似乎错误的事实。