javascript - Mega 如何在不需要许可的情况下将文件保存到硬盘驱动器

标签 javascript php html security

<分区>

我不确定是否可以问这个问题,所以请随意将我的问题移到别处或关闭它。
有人告诉我,只有当浏览器上发生诸如拖放之类的显式事件并为其提供文件句柄时,Javascript 才能从磁盘写入和读取。

在 Mega(例如上传)的情况下,当您点击下载时,您直接将文件保存到磁盘,而无需保存或安装任何浏览器扩展程序。
它是 Javascript 还是 HTML 5 的一个特性,因为在我看来,在这种情况下这意味着一个可怕的安全问题。

编辑 1: 所以我的问题是,Mega 如何在不向您显示浏览器的 Save to 对话框弹出并自行确定文件放置位置的情况下写入磁盘

最佳答案

问题有些含糊,要正确回答,我们可能需要有关您的系统和浏览器 vendor/版本的更多信息。 Mega 使用一些非常酷的东西来处理下载和文件。

他们根据客户端环境使用:

  • 文件系统 API(Chrome/Firefox 扩展 polyfill);
  • Adobe Flash SWF Filewriter(旧浏览器的回退);
  • BlobBuilder (IE10/IE11);
  • MEGA Firefox 扩展(已弃用);
  • 基于数组缓冲区/Blob 内存;
  • MediaSource(实验性流媒体解决方案);
  • 基于 IndexedDB blob(Firefox 20+)。

使用所有这些方法,无需用户干预/授权直接下载将依赖于浏览器的兼容性。我在 Linux 上使用 Firefox,当我从 Mega 中选择一个文件并单击下载时,会出现一个对话框,因此,实际上,我必须授权下载。但是如果你看this screnshot ,在“来自”字段中,您会看到“blob”一词,这是 Blob object 的标志来自 File API W3C Specification .

您可以查看 Blob API 使用示例 in this fiddle和检查Mega's source code (案例 4:基于 Arraybuffer/Blob 内存,第 15、293、324、802 行)。

window.URL = window.URL || window.webkitURL;

var blobExample = new Blob(['\
<!doctype html>\n\
<html>\n\
<body>Hello from Blob file!</body>\n\
</html>'], {type: 'text/html'});

var blobLink  = document.createElement('link');
blobLink.rel  = 'html';
blobLink.href = window.URL.createObjectURL(blobExample);
document.body.appendChild(blobLink);

var anchor = document.createElement('a');
anchor.href = window.URL.createObjectURL(blobExample);
anchor.download = 'blob-example.html';
anchor.textContent = 'Download the binary large object';
document.body.appendChild(anchor);

=)

关于javascript - Mega 如何在不需要许可的情况下将文件保存到硬盘驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019796/

相关文章:

javascript - 获取光标插入符所在的选定内容可编辑元素的子元素的 ID

php - Composer 自动加载器未加载 GuzzleHttp\ClientInterface

php 每个循环插入数据两次,而不是按预期插入每一行

html - 仅导航栏事件类文本的边框

javascript - 如何将 html 链接插入数组字符串?

javascript - ES2015 : How can I simplify an if statement with assignment?

jquery - 声音在HTML网页上无法正常工作

html - 使用 CSS 增加水平菜单项之间的间距时遇到问题

javascript - 使用我从未在 JQuery 中定义的对象

php - MAMP 500 内部服务器错误。 MAC OSX PHP