Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拖出一个.zip文件进行下载_Javascript_Node.js_Html_Zip_Nw.js - Fatal编程技术网

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创建一个本地服务器,并尝试从这里下载该文件,但这有点黑客行为,可能有更好的解决方案。