如何将文件链接到网站之外

时间:2011-05-16 15:59:43

标签: c# .net file

我们的应用程序服务器有一个文件夹,用于存储客户上传的附件。此文件夹称为“附件”,它位于网站之外,没有此文件夹的虚拟目录。我想知道如何链接这个文件夹的文件。 我的代码是:

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:/附件?提前谢谢。

3 个答案:

答案 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的资源。