在 MVC 4 Razor 应用程序中创建下载 link 到内部驱动器上的物理文件
Creating a Download link to a physical file on internal drive, within an MVC 4 Razor Application
我正尝试在 MVC4 应用程序中执行此操作:
@foreach (var item in Model)
{
<tr>
<td><a href="@item.DownloadUrl">Download Document</a></td>
</tr>
}
视图呈现良好,但是当我单击 link 时,没有下载任何内容。
当我将鼠标悬停在 @item.DownloadUrl
上时,我可以看到它的值为:C:\Websites\Documents5.pdf
,这是正确的。
当我将鼠标悬停在 link 本身上时,我看到这个 URL 而不是上面的 file:///C:/Websites/Documents/105.pdf
,这表明 'file:///' 已添加到开始。
我想知道我怎样才能正确地做到这一点。我知道在我可以让应用程序 link 访问本地驱动器文件之前可能有一些 IIS 配置,但是到目前为止这显然不相关或者是吗?我在 运行 处于调试模式 Visual Studio 中..
注意。 @item.DownloadUrl
是在运行时根据一些代码生成的,例如:
while (Reader.Read())
{
la.DownloadUrl = Path.Combine(DocumentsLocation, Reader["Id"] + ".pdf");
}
谢谢。
您确实需要使用 Server.MapPath
到 link 到服务器上的远程文件。您现在正在做的是 linking 到客户端计算机上的物理文件。
HttpContext.Current.Server.MapPath(Path.Combine(DocumentsLocation, Reader["Id"] + ".pdf"));
这就是我最终解决问题的方式:
byte[] fileBytes = System.IO.File.ReadAllBytes(System.IO.Path.Combine(DocumentsLocation, name + ".pdf"));
string fileName = name + ".pdf";
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
感谢所有贡献者。
我正尝试在 MVC4 应用程序中执行此操作:
@foreach (var item in Model)
{
<tr>
<td><a href="@item.DownloadUrl">Download Document</a></td>
</tr>
}
视图呈现良好,但是当我单击 link 时,没有下载任何内容。
当我将鼠标悬停在 @item.DownloadUrl
上时,我可以看到它的值为:C:\Websites\Documents5.pdf
,这是正确的。
当我将鼠标悬停在 link 本身上时,我看到这个 URL 而不是上面的 file:///C:/Websites/Documents/105.pdf
,这表明 'file:///' 已添加到开始。
我想知道我怎样才能正确地做到这一点。我知道在我可以让应用程序 link 访问本地驱动器文件之前可能有一些 IIS 配置,但是到目前为止这显然不相关或者是吗?我在 运行 处于调试模式 Visual Studio 中..
注意。 @item.DownloadUrl
是在运行时根据一些代码生成的,例如:
while (Reader.Read())
{
la.DownloadUrl = Path.Combine(DocumentsLocation, Reader["Id"] + ".pdf");
}
谢谢。
您确实需要使用 Server.MapPath
到 link 到服务器上的远程文件。您现在正在做的是 linking 到客户端计算机上的物理文件。
HttpContext.Current.Server.MapPath(Path.Combine(DocumentsLocation, Reader["Id"] + ".pdf"));
这就是我最终解决问题的方式:
byte[] fileBytes = System.IO.File.ReadAllBytes(System.IO.Path.Combine(DocumentsLocation, name + ".pdf"));
string fileName = name + ".pdf";
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
感谢所有贡献者。