Javascript 将数据URI格式的文件从浏览器拖到桌面

Javascript 将数据URI格式的文件从浏览器拖到桌面,javascript,html,Javascript,Html,正如所指出的,有一种方法可以通过从浏览器到桌面的拖放来下载文件 我想将一个数据uri格式的文件(例如“data:application/octet stream;base64,eNcoDEdFiLEStuFf”)拖到桌面上。由于安全原因,我无法提供服务器下载的完整URL(文件需要在客户端处理) 当我尝试博客文章示例中给出的内容时,将创建一个内容和名称为当前时间戳的文件: item.addEventListener("dragstart", function(evt) { evt.data

正如所指出的,有一种方法可以通过从浏览器到桌面的拖放来下载文件

我想将一个数据uri格式的文件(例如“data:application/octet stream;base64,eNcoDEdFiLEStuFf”)拖到桌面上。由于安全原因,我无法提供服务器下载的完整URL(文件需要在客户端处理)

当我尝试博客文章示例中给出的内容时,将创建一个内容和名称为当前时间戳的文件:

item.addEventListener("dragstart", function(evt) {
    evt.dataTransfer.setData("DownloadURL", "data:application/octet-stream;base64,eNcoDEdFiLEStuFf");
}
我已经尝试过更改format参数,稍微调整一下数据的格式,并提前取消编码,但没有任何效果,我从未将任何数据放到桌面上。至少在某些浏览器中,有什么方法可以实现我想要的吗


顺便说一下,我们不使用jQuery。因此,如果有使用jQuery的解决方案,这可能会很有趣,但这很可能不适用于我们的项目。

据我所知,下载URL应具有以下格式: mime类型:文件名:URL。WARE URL是您的数据URI。 对于您的情况:

item.addEventListener("dragstart", function(evt) {
    evt.dataTransfer.setData("DownloadURL", "application/octet-stream:fileName.bin:data:application/octet-stream;base64,eNcoDEdFiLEStuFf");
}
这将创建fileName.bin文件

看看
但它似乎只在chrome上起作用

我也试过了,没用。。。创建了与另一种方式相同的“时间戳文件”。因此,我重新检查了您的JSFIDLE和我的代码。虽然这确实是按照您的方式工作的,但它不在我的代码中,但这是我的问题:(对于遇到这种情况的所有人来说:我在dragstart期间使用异步调用,并在其响应中调用evt.dataTransfer.setData()。似乎这个函数只能在事件处理程序的开头调用。