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

本文关键字:文件下载 路径 另一个 驱动器 | 更新日期: 2023-09-27 18:13:29

我需要提供一个下载链接到D:drive中的pdf文件。

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

我如何在我的网站中提供一个下载链接到我的D:drive中的pdf文件,该文件托管在C:驱动器中?

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

通常,我尽量不直接公开可下载的文件。

相反,我编写了一个ASHX处理程序(VisualStudio中的"通用处理程序"(,它可以获取文件并将其发送到用户的浏览器。

基本上,您将一个唯一的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; }
    }
}

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

  • 权限检查用户是否已登录并可以下载文件
  • 将具有不同文件名的流式传输到客户端
  • 将日志文件下载到数据库

您可以使用NTFS连接点将当前为D:的驱动器安装到C:驱动器内的文件夹中,这将使D:驱动器看起来像是C:驱动器的一部分。所有问题都解决了。

mklink是Windows附带的一个程序,可方便地创建、管理和删除各种链接(包括连接点(,其使用详细信息可在Microsoft TechNet文档中心找到。

或者,你可能对符号链接和硬链接感兴趣,它们在本质上是相似的(尽管有细微的差异(。