拖出.zip文件进行下载

时间:2016-02-03 18:38:52

标签: javascript node.js html5 zip nw.js

我正在使用.zip创建node.js文件(使用nw.js),然后将生成的文件的路径发送到前端。我希望用户能够将HTML元素从nw.js窗口拖到他的桌面并将其更改为drop .zip文件(使用其他文件类型here结帐一个简单示例)。

我知道我可以使用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>

我想我应该为.zip文件创建一个流,但我不知道如何。即使在“客户端”,我也可以访问fs模块,因此没有限制。有关如何实现这种效果的任何想法?

1 个答案:

答案 0 :(得分:0)

我想出了如何让它发挥作用。它没有用,因为我试图下载本地文件,所以我创建了一个临时HTTP服务器,它在MIME类型设置为.zip的每个请求上返回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>