【问题标题】:Browser download file prompt using JavaScript使用 JavaScript 的浏览器下载文件提示
【发布时间】:2010-10-18 03:34:02
【问题描述】:

我想知道是否有任何方法可以使用 JavaScript 实现浏览器的下载文件提示。

我的理由 - 用户会将文件上传到无法从网络服务器访问的本地文件服务器。换句话说,两者都将在不同的域上!

例如,假设网站托管在www.xyz.com,但文件将驻留在本地文件服务器上,地址为\\10.10.10.01\Files\file.txt。我如何上传/传输文件到本地文件服务器...使用 ActiveX 和 VBscript! (不要问 :-)

所以我将本地文件路径存储在我的数据库中并将该数据绑定到网格。当用户单击该链接时,文件会在一个窗口中打开(使用 JavaScript)。

问题是某些文件类型,如文本、jpg、pdf 等。在浏览器窗口中打开。我如何能够使用客户端脚本实现content-typecontent-disposition?这甚至可能吗?

编辑: 本地文件服务器有一个保存文件的窗口共享文件夹。

【问题讨论】:

  • 我很确定没有办法用 javascript 做到这一点。
  • 查看this article 的内容处置。如前所述,它必须在响应标头中设置,而不是 Javascript 实现。
  • 您的“本地文件服务器”是什么样的服务器?一个实际的 HTTP/FTP/任何服务器,或者您在谈论 Windows 的共享文件夹(即您的意思是 \\10.10.10.01 而不是 //10.10.10.01
  • 它是 Windows 中的共享文件夹,文件的实际路径是 '\\10.10.10.01\Files\file.txt'
  • :-\ 很好地尝试了这个webdeveloper.com/forum/showpost.php?p=74189&postcount=3 但没有运气......

标签: javascript file-browser


【解决方案1】:

"content-disposition: attachment" 几乎是强制执行此操作的唯一方法,并且必须在响应标头中进行设置。

【讨论】:

  • 如何在客户端设置?目前我正在使用javascript打开文件。调用 window.open('\\10.10.10.01\Files\file.txt') 打开文件。这将在窗口中打开文件。 “content-disposition: attachment”不是服务器端响应头设置吗?
  • 正如问题所说“必须在响应头中设置”,不能在客户端设置。
【解决方案2】:

您可以尝试使用带有type="application/octet-stream" 的普通超链接。似乎在 FF 中可以工作,但是 IE 和 Opera 忽略了该属性。

【讨论】:

  • 按照规范,IE 和 Opera 是对的。 type 属性表示“从服务器中期待这个”,这样不理解特定内容类型的客户端就可以避免尝试下载它(对于机器人最有用)。真正的 Content-Type 胜过它。
  • 在我看来,IE 和 Opera 是错误的:在没有任何其他内容类型信息(这里就是这种情况)的情况下,类型属性给出的“建议提示”(HTML 规范)应该受到浏览器的尊重;记住,文件不是通过 HTTP 发送的,所以没有 Content-Type 字段可以胜过属性
【解决方案3】:

如果文件托管在您的示例中的网络服务器上,您可以这样做:

window.location.replace(fileUrl);

.. 浏览器会知道如何处理该文件。这适用于大多数文件,例如 .xls、.csv 等,但请记住,这不是完全证明,因为用户的 MIME 处理程序设置将决定如何处理文件......即如果它是一个 .txt 文件,它很可能只是显示在浏览器中,不会出现“文件下载”对话框。

【讨论】:

  • 请注意,这意味着您可以将其放在地址栏中:data:text/csv,a,b,c%0ad,e,f(这将创建一个 3 列和 2 行的 CSV 文件下载)。不确定这是否符合原始问题,但谷歌搜索如何创建该提示,我最终来到了这里。也许它可以帮助未来的读者:)
【解决方案4】:

从 2015 年 8 月起,将“下载”属性添加到您的代码中,可以实现您正在寻找的行为,至少在 Chrome 中是这样。

【讨论】:

  • 不幸的是,Firefox 不支持跨域支持,也不能在 Safari、Edge 和 IE 上运行,这使得下载属性对我来说毫无用处:/
猜你喜欢
  • 2012-07-04
  • 2018-09-13
  • 2019-03-12
  • 2012-01-18
  • 2022-11-11
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2011-11-22
相关资源
最近更新 更多