如何从另一个驱动器获得文件下载的绝对路径
本文关键字:文件下载 路径 另一个 驱动器 | 更新日期: 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文档中心找到。
或者,你可能对符号链接和硬链接感兴趣,它们在本质上是相似的(尽管有细微的差异(。