【发布时间】:2011-05-10 20:36:30
【问题描述】:
我的网站有一个 .pdf 格式的文件。
如果您左键单击该链接,它将打开 Adobe Reader 并打开文件。
我想要做的是当你左键单击时,它会打开一个对话框,询问你想去哪里
保存文件。
我知道您可以通过右键单击并选择另存为来执行此操作, 但是有什么办法只需要
单击鼠标左键即可下载?
【问题讨论】:
我的网站有一个 .pdf 格式的文件。
如果您左键单击该链接,它将打开 Adobe Reader 并打开文件。
我想要做的是当你左键单击时,它会打开一个对话框,询问你想去哪里
保存文件。
我知道您可以通过右键单击并选择另存为来执行此操作, 但是有什么办法只需要
单击鼠标左键即可下载?
【问题讨论】:
我确定有某种破解方法可以完成此操作,但这是在机器上安装 Adobe Reader 时随浏览器一起安装的功能。为所有用户保持一致是最好的方法。不要费心尝试左键单击打开保存对话框。用户已经习惯了这种行为,并且会知道如何将 PDF 保存到本地硬盘
一致性是这里的关键。
【讨论】:
两部分,您必须将 pdf 转换为字节流并在 html 响应中添加 content-disposition 标头。
首先获取文件并流式传输到字节数组
public byte[] GetDocument(string filePath)
{
return File.ReadAllBytes(filePath);
}
然后发送它 - 作为 Page_Load 事件中的第一件事 - 您需要通过会话或查询字符串将文件路径传递到新页面,因为您无法更改现有页面的内容类型您已经在浏览器中查看过的页面。
Byte[] fileData = GetDocument(filePath);
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/pdf";
// prompt to download
Response.AppendHeader("content-disposition", "attachment; filename=declarations.pdf");
Response.AppendHeader("content-length", fileData.Length.ToString());
Response.BinaryWrite(fileData);
Response.Flush();
Response.Close();
【讨论】:
将 pdf 添加到 zip 文件夹并添加指向 zip 文件夹的链接
【讨论】:
从链接的 href 部分删除 pdf 位置,并改为编写 onClick 方法。
<a href="#" onClick="$:openSaveDialog">
<script>
function openSaveDialog() {
//Write a JavaScript function to prompt the user with a Save Dialog Box.
}
</script>
【讨论】: