如何从另一个驱动器获取文件下载的绝对路径?

时间:2011-11-02 05:55:36

标签: c# asp.net c#-4.0

我需要提供一个PDF文件的下载链接,该文件位于D:drive。

我的网站托管在同一系统的C:驱动器中。

如何在我的网站D:驱动器中提供我的pdf文件的下载链接,该网站位于C:驱动器中?

2 个答案:

答案 0 :(得分:1)

通常,我会尝试不直接公开可下载的文件。

相反,我编写了一个ASHX处理程序(Visual Studio中的“Generic Handler”),用于获取文件并将其发送到用户的浏览器。

基本上,您将一个唯一的ID传递给处理程序(例如纯文件名),处理程序完成剩下的工作以在本地获取文件并将其流式传输到浏览器,如下所示:

public class MyHandler :
    IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var fileName = Request[@"fn"];
        var filePath = Path.Combine(@"C:\My\Fixed\File\Path", fileName );

        Response.ContentType = @"application/pdf";

        Response.AddHeader(
            @"Content-Disposition", 
            @"attachment; filename=" + Path.GetFileName(filePath));
        Response.AddHeader(
            @"Content-Length",
            new FileInfo(filePath).Length );

        Response.WriteFile(filePath);
        Response.End();
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

这种方法的优点是您可以完全控制文件是否以及如何下载。一些场景包括:

  • 检查用户是否已登录并可以下载文件的权限。
  • 使用不同的文件名流式传输到客户端。
  • 将文件下载记录到数据库中。
  • ...

答案 1 :(得分:0)

您可以使用NTFS交接点将当前D:的驱动器安装到C:驱动器内的文件夹中,这样可以使D:驱动器显示为您的C:驱动器的一部分mklink开车。所有问题都解决了。

{{1}}的使用详情,可以在at the Microsoft TechNet documentation center找到,这是Windows中包含的便于创建,管理和删除各种链接(包括交接点)的程序。

或者,您可能对符号链接和硬链接感兴趣,这些链接和硬链接本质上相似(尽管有细微差别)。