【问题标题】:Javascript trigger download outside of browserJavascript 在浏览器之外触发下载
【发布时间】:2015-09-24 22:11:03
【问题描述】:

在浏览器之外触发下载的最佳方式是什么?

我有一个 Html 页面,它不在服务器上,但只能用作数字标牌查看器。服务器(已经存在)通过 TCP 套接字(服务器有点旧)发送一个播放列表,告诉客户端它需要从哪里以及应该呈现媒体的位置下载什么媒体。

Javascript 客户端代码和 Tomcat 服务器之间的通信暂时无关紧要。我想知道的是是否有办法将文件下载到某个目录而不让浏览器下载文件(问题->下载弹出窗口->确认->无法使用Javascript预设不同的下载文件夹等),以便我可以在下载媒体标签后设置它们的来源?

(如果您问我为什么不简单地流式传输媒体,那是因为如果连接丢失,媒体仍然需要继续播放)

我真的希望我的解释有意义。

干杯 危机

【问题讨论】:

  • 不,您不能选择下载文件的位置,它们将去用户决定的地方。但是,有一个特殊的地方可以保存位于沙盒中的页面特定文件。见noupe.com/design/…
  • 如果您在谈论媒体文件,可以将preload 属性设置为metadata

标签: javascript file sockets browser download


【解决方案1】:

您可以将内容发送到网络服务器,然后以指定的类型/文件名将其返回给浏览器。例如在 PHP 中,你可以这样做:

header('Content-type: text/html');
header('Content-disposition: attachment;filename=myfile.txt'); 

另一个选项是这个不错的 JavaaScript 库,它允许您在客户端保存一些内容: https://github.com/koffsyrup/FileSaver.js

它允许你在浏览器中做这样的事情:

saveTextAs("Hi,This,is,a,CSV,File", "test.csv"); 

您可能还希望将内容存储在浏览器的localStoragesessionStorage 中。

【讨论】:

  • 感谢您的回答 - localstorage 和 sessionStorage 听起来确实很有趣,但是,如果我错了,请纠正我,只支持保存键值对。我需要将视频保存到磁盘上,以便即使在我重新启动浏览器、电脑等之后也可以访问它。似乎 Javascript 和 Html 5 还不够,我需要切换到非浏览器方法,或者两者的结合。
  • localStorage 是您唯一的选择。如果您可以使用 base64 或其他方式对视频进行编码,则可以将其存储在那里并一直保留在那里,直到您将其删除。但是,有大小限制。
【解决方案2】:

我想知道的是,是否有一种方法可以在不让浏览器下载文件的情况下将文件下载到某个目录

如果这可能会导致安全漏洞,因为它可以将特殊文件(如程序)放入特殊文件夹(如自动启动),然后导致不必要的代码执行。出于安全考虑,希望这是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多