Javascript 拖出一个.zip文件进行下载
我正在使用Javascript 拖出一个.zip文件进行下载,javascript,node.js,html,zip,nw.js,Javascript,Node.js,Html,Zip,Nw.js,我正在使用node.js(使用nw.js)创建一个.zip文件,然后将生成文件的路径发送到前端。我希望用户能够将HTML元素从nw.js窗口拖到桌面,并将其更改为.zip文件(使用另一种文件类型签出一个简单示例) 我知道我可以使用dataTransfer属性并将数据类型设置为application/zip,但我不知道如何使用此方法发送.zip文件数据 React = require "react" module.exports = React.createClass onDragSta
node.js
(使用nw.js
)创建一个.zip
文件,然后将生成文件的路径发送到前端。我希望用户能够将HTML元素从nw.js
窗口拖到桌面,并将其更改为.zip
文件(使用另一种文件类型签出一个简单示例)
我知道我可以使用dataTransfer
属性并将数据类型设置为application/zip
,但我不知道如何使用此方法发送.zip
文件数据
React = require "react"
module.exports = React.createClass
onDragStart : ( event ) ->
event.dataTransfer.setData "application/zip:#{@props.path}"
render : ->
<div draggable="true" onDragStart={@onDragStart}>Download</div>
React=需要“React”
module.exports=React.createClass
onDragStart:(事件)->
event.dataTransfer.setData“application/zip:#{@props.path}”
渲染:->
下载
我想我应该为
.zip
文件创建一个流,但我不知道如何创建。我可以访问fs
模块,即使是在“客户端”,因此没有限制。有没有想过如何才能达到这种效果?我想出了如何让它发挥作用的办法。它不起作用,因为我试图下载一个本地文件,所以我创建了一个临时HTTP服务器,在每个请求中返回.zip
文件,MIME类型设置为application/zip
。然后我只需将数据传输URL设置为http://localhost:3000
瞧
代码如下:
fs = require "fs"
http = require "http"
React = require "react"
module.exports = React.createClass
componentWillMount : ->
index = fs.readFileSync @props.path
server = http.createServer ( request, response ) =>
response.writeHead 200, { "Content-Type" : "application/zip" }
response.end index
server.listen 3000
onRequestDownload : ( event ) ->
event.dataTransfer.setData "DownloadURL", "application/zip:FileName.zip:http://localhost:3000"
render : ->
<div className="view download">
<div className="download-item" draggable="true" onDragStart={@onRequestDownload}>Download</div>
</div>
fs=需要“fs”
http=需要“http”
反应=要求“反应”
module.exports=React.createClass
组件将安装:->
index=fs.readFileSync@props.path
server=http.createServer(请求、响应)=>
response.writeHead 200,{“内容类型”:“application/zip”}
响应结束索引
服务器3000
onRequestDownload:(事件)->
event.dataTransfer.setData“DownloadURL”,“application/zip:FileName.zip:http://localhost:3000"
渲染:->
下载
通常情况下,它的工作方式与此相反,您可以将文件拖到窗口中,而不是从窗口中拖出。这当然可以在本地实现,但不确定nw.js是否可以实现?如果我们可以在任何浏览器中使用多种mime类型(如text/html
,image/png
[…])(甚至字体文件)实现这一点,我想它应该可以与application/zip
一起工作。如果浏览器能够做到这一点,那么我想它应该在nw.js
中工作,因为它是基于Chrome的,不是吗?是的,如果你能在Chrome中做到这一点,你应该也能在Node Webkit中做到这一点,你可能也能在Chrome中做到?我必须对此进行测试,但我认为您需要一个带有URL的可拖动锚点,而不仅仅是一个流。我只是从一个示例中选取了一个,它在pdf中运行良好,但在zip文件中无法运行。它似乎可以在Gmail中使用zip文件,所以如果你想知道如何使用它,这是可能的。我想它不起作用,因为它是本地文件。我将尝试使用node.js创建一个本地服务器,并尝试从这里下载该文件,但这有点黑客行为,可能有更好的解决方案。