创建文件服务器上文件的下载链接

我正在寻找一种方法(轻松,优先;))创建一个单独的文件服务器上的文件的下载链接。

情况如下:我正在开发的应用程序(vb.net中的asp.net 2.0,但我在c#中有类似的问题,无论哪种解决方案适用于我)都将在公司内部运行。 按照良好做法,文件存储和Web应用程序位于两个单独的服务器上。

我基本上需要能够创建一个文件的下载链接,我必须访问该文件的唯一可用URL是\ servername \ folder1 \ folder2 \ folder3 \ file.txt (可以是任何类型的文件)

Weblinks根本不起作用。 这是它目前的设置方式:

tablerowfield.Text = String.Format( "Click me", filename) 

由于显而易见的原因,这不起作用。 它曾经被设置为将该文件写入应用程序路径本身并且完美地工作,但这不是好习惯,这就是我改变它(或尝试)的原因。

我阅读了有关创建下载页面的解决方案,然后在数据库中有一个表,其中包含链接并返回适当的Web URL以供下载,但不幸的是,我面临的时间限制不允许我开发它。

假设我可以像上面那样为文件提供一个包含完整文件路径的字符串,那么创建链接的最简单方法是什么?单击时,下载文档?

注意:我在此环境中拥有0个管理员权限。 那真的没有帮助我。 让我们假设我得到了如上所述的正确链接,并拥有相应的文件访问权限等。

更新:

上面的示例适用于IE,但不适用于Firefox和Chrome。 IE将其转换为文件:// servername / …链接,它可以实现预期,但FF和Chrome都主动决定这是不安全的,并已从浏览器中禁用它。

您可以使用ASHX文件(例如,https://stackoverflow.com/questions/7725599/creating-download-link-to-a-file-on-a-file-server/downloadfile.ashx)并使用以下代码(未经过测试,但它会是类似的):

  Response.Clear(); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=abc.txt"); Response.WriteFile(Server.MapPath("\\servername\folder1\folder2\folder3\abc.txt")); Response.End(); 

然后在你的锚标签中使用它,如:

 Click me 

注意:您还可以传递用于下载不同文件的参数,例如:

 Click me 

然后,在ashx文件中,使用文件名下载相应的文件。

这段代码将在下载文件夹中创建一个文件,其名称为= hi.txt,内容为“感谢上帝,最后文件已下载”。

  Response.Clear(); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=hi.txt"); Response.Write("thanks god, finally file got downloaded."); Response.End(); 

如果您的文件已经存在于服务器上,那么您可以在下载按钮单击事件中使用此代码

 protected void downloadpdf_Click(object sender, EventArgs e) { Response.Clear(); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=""downloadName.pdf"""); Response.WriteFile(Server.MapPath(@"~/path of pdf/actualfile.pdf")); Response.End(); } 

\\servername\folder1\folder2\folder3\...是一个无法在浏览器中使用的UNC路径。 由于文件位于单独的服务器上,因此需要格式为http://server-name/folder1/folder2/file.txthref属性。

如果客户端无法解析服务器名称,则需要首先获取服务器的IP地址,然后制定表单的href: http://10.1.1.30/folder1/folder2/file.txthttp://10.1.1.30/folder1/folder2/file.txt

以下是从server-name获取IP地址的方法:

 IPAddress[] host; host = Dns.GetHostAddresses("server-name"); string ip = host[0].ToString(); 

编辑:

我基本上需要能够创建一个文件的下载链接

使用ashx解决方案,您的应用程序将从服务器读取文件并将其中继到客户端,而不仅仅是为客户端提供直接从文件服务器下载文件的链接。