下载js文件,节点js

时间:2020-06-11 04:23:01

标签: javascript node.js ajax npm

制作网页,将其模块化组装。我使用节点js,即节点静态服务器。

我需要实现从计算机上下载文件,然后再下载到设备上,以便通过按钮下载文件。

虽然我在尝试从计算机到自己的计算机的过程中需要的路径,但是无论如何都无法解决。已经尝试过各种npm模块。 这是发送代码的html代码和客户端文件:

<form name="upload" method="POST" enctype="multipart/form-data">
<input type="file" id="file" name="file">
<input type="submit" name="submit" value="Обновить">
</form>
fileId = file.name;
var formData = new FormData();
formData.append("file", document.querySelector('input').files[0]);
var xhr = new XMLHttpRequest();
xhr.open("POST", "savesettings", true);
xhr.setRequestHeader('X-File-Id', fileId);
xhr.addEventListener("load", function() {
            console.log("Done:", xhr.status);
});
xhr.send(formData);

这是应该接受请求并将文件保存到所需目录的脚本,在我看来这是主要问题:

if (req.url == '/savesettings' && req.method == 'POST') {

        let fileId = req.headers['x-file-id'];
        let filePath = path.join('/home/alexandr/alexandr/web-cfg/uploads', fileId);

        if (!uploads[fileId]) uploads[fileId] = {};
        let upload = uploads[fileId];

        let fileStream;

        upload.bytesReceived = 0;

        fileStream = fs.createWriteStream(filePath, {
            flags: 'w'
        });
        console.log("fileStream1:", fileStream);

        req.on('data', function(data) {
        console.log("data:", data.length);
        upload.bytesReceived += data.length;
        console.log("bytes received", upload.bytesReceived);
        });

        req.pipe(fileStream);
        console.log("req.pipe:", req.pipe(fileStream));
        console.log("123", req.data);

        fileStream.on('close', function() {
            if (upload.bytesReceived <= 50000) {
            debug("Upload finished");
            delete uploads[fileId];

            res.end("Success " + upload.bytesReceived);
            } else {
            debug("File unfinished, stopped at " + upload.bytesReceived);
            res.end();
            }
        });

        fileStream.on('error', function(err) {
            debug("fileStream error");
            res.writeHead(500, "File error");
            res.end();
        });
    }

1 个答案:

答案 0 :(得分:0)

根据我对HTML的了解,我会说它主要在HTML中而不是服务器中。如果您可以通过在URL中的域后键入文件的路径来访问文件,那么您应该可以通过网站进行访问。

一个简单的HTML示例如下所示:

<a href="path/to/file.js" download>

然后可以使用CSS设置链接的样式,以使其具有您想要的外观。