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

Fla*_*ter 10 c# vb.net asp.net file download

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

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

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

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

tablerowfield.Text = String.Format(
    "<a href=""\\servername\folder1\folder2\folder3\{0}"" 
        target=""_blank"">Click me</a>",
    filename)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

更新:

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

was*_*lli 19

您可以使用ASHX文件(例如,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();
Run Code Online (Sandbox Code Playgroud)

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

<a href="downloadfile.ashx"  target=""_blank"">Click me</a>
Run Code Online (Sandbox Code Playgroud)

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

<a href="downloadfile.ashx?file=abc.txt"  target=""_blank"">Click me</a>
Run Code Online (Sandbox Code Playgroud)

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

  • 这个解决方案对我有用,但我使用 Response.TransmitFile 而不是 Response.WriteFile,因为它更适合大文件。 (2认同)