拖出要下载的.zip文件

Dragging out a .zip file to download

本文关键字:zip 文件 下载      更新时间:2023-09-26

我正在使用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>

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

我想出了如何让它工作的方法。它不起作用,因为我正在尝试下载本地文件,所以我创建了一个临时 HTTP 服务器,该服务器在每个请求时返回 MIME 类型设置为 application/zip.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>