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

问题描述:

我需要提供一个下载链接到D:驱动器中的pdf文件。如何从另一个驱动器获取文件下载的绝对路径?

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

如何在C:驱动器托管的我的网站上的D:驱动器中下载我的pdf文件的链接?

+0

你试过:字符串str = HttpContext.Current.Request.Url.AbsolutePath; ? –

+0

对不起,这是..即时新到*。将很快做到。和路径..我只需要给一个下载链接。但我无法引用D中的文件: –

通常,我尽量不要直接暴露可下载文件。

相反,我编写了一个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; } 
    } 
} 

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

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

我无法打开PDF文件。它说的文件可能是腐败的。所以我试图下载一个txt文件。当我打开该文件时,内容丢失了。我以下面的文件内容为“

+0

所以你删除了15个声望点,因为我的_pseudo code_不起作用?当然,你必须根据你的需要来调整它。 –

+1

对不起..它不是..它没有工作.. Response.WriteFile(filePath);无法映射到另一个驱动器。这是我的实际问题。只能从projet文件夹下载 –

可以挂载驱动器使用NTFS交接点,这将使你的D:驱动器出现,就好像它是你的C:驱动器的一部分,这是目前D:到文件夹C:驱动器内。所有问题解决。

mklink是Windows附带的一个程序,可以帮助您创建,管理和删除各种链接(包括连接点),它的使用细节可以在at the Microsoft TechNet documentation center找到。

或者,您可能对符号链接和硬链接感兴趣,它们本质上是相似的(虽然有细微差别)。