我们的应用程序服务器有一个文件夹,用于存储客户上传的附件。此文件夹称为“附件”,它位于网站之外,没有此文件夹的虚拟目录。我想知道如何链接这个文件夹的文件。 我的代码是:
string vetting = "c:\\Attachments";
if (Directory.Exists(vetting +"\\"+ "UserName"))
{
DirectoryInfo di = new DirectoryInfo(vetting+"\\" + "UserName");
FileInfo[] rgFiles = di.GetFiles("*.*");
if (rgFiles.Length > 0)//thumb.db will be a file
{//list is a div on front end.
list.InnerHtml += <span class='SubTitle'>Your attachments list:</span>";
foreach (FileInfo fi in rgFiles)
{
list.InnerHtml += "<br><a href='c:/Attachments/UserName/"+fi.Name+"'>"+fi.Name+"</a>" ;
}
}
else
{
list.InnerHtml += "You don't have any attachment yet.";
}
}
但它不起作用,总是找到客户端c:/ Attachments。我怎么能链接到服务器端c:/附件?提前谢谢。
答案 0 :(得分:1)
如果这些文件未暴露给IIS(您的网络服务器),则无法链接到这些文件。
建议考虑2个选项:
创建一个.ashx(ASP.NET Web处理程序)来处理这些请求。它会根据您的需要读取所请求的文档(来自session,cookie或querystring)。您的.InnerHtml
可以是<a href='mysite.com/bar.ashx?file=foo'>foo.xlsx</a>
。然后,您可以实现授权检查,文件名混淆等等。读取所需文件的字节,然后返回客户端。
在IIS站点/应用程序下创建一个虚拟目录。将此vdir称为“附件”。 警告:这允许任何人使用/构建/使用任何链接来查看任何附件。考虑禁用目录浏览。确保相应的IIS用户具有NTFS权限才能查看此目录。如果安全性不是问题/要求,请执行此操作。您的.InnerHtml
可以是<a href='mysite.com/attachments/foo.xlsx'>foo.xlsx</a>
答案 1 :(得分:0)
C Drive
引用本地计算机,而不是Web服务器目录。因此,点击您网站上的链接的任何用户都将被定向到他们自己的C drive
。您需要将附件文件夹上传到Web服务器上的现有目录,或者创建自己的Virtual Directory。
答案 2 :(得分:0)
当然它转到客户端目录结构,即浏览器运行的位置。它不知道如何设置服务器。
您需要通过HTTP公开这些链接,因此他们需要一个解析为地址的地址,该地址知道如何将服务器上的这些文件解析为可用于HTTP的资源。