【问题标题】:Downloading File From Client Side Node.js从客户端 Node.js 下载文件
【发布时间】:2022-07-21 22:45:28
【问题描述】:

所以我正在尝试构建一个网站,当用户访问该网站并单击下载按钮时,该网站允许用户下载位于服务器计算机中的文件。

由于一些现实世界的限制,我希望使用尽可能少的库。理想情况下没有 Express 或 Ajax。而且我认为仅使用 vanilla node.js 就应该完全有可能

从我在互联网上的搜索看来,大部分代码都是这种形式:

const fs = require('fs');
const https = require('https');
  
// URL of the image
const url = 'GFG.jpeg';
  
https.get(url,(res) => {
    // Image will be stored at this path
    const path = `${__dirname}/files/img.jpeg`; 
    const filePath = fs.createWriteStream(path);
    res.pipe(filePath);
    filePath.on('finish',() => {
        filePath.close();
        console.log('Download Completed'); 
    })
})

但是,代码似乎并没有按照我的意愿行事。 首先,它需要一个 url,因此它更多的是关于将在线资源定向到另一个位置。而我想在用户访问网站时实际向用户提供服务器上本地存储的文件。

其次,它似乎正在下载到服务器计算机。但我想要的是让用户下载到他们自己的客户端设备。基本上,当您想在 Internet 上下载内容时会遇到正常的下载功能,并且您会看到浏览器的“下载”部分有一些新条目。

我怎样才能实现我想要的?

我在这方面完全是个菜鸟,所以如果我能得到一个带有一些虚拟文件或路径名的骨架代码,那就太好了。

感谢任何指导。谢谢!

【问题讨论】:

    标签: javascript html node.js


    【解决方案1】:

    您缺少一个 http.server。 http.get 只是做一个网络请求,正如你所说,你不想这样做。

    以下是一些示例代码,无需使用 express 即可创建服务器并提供单个文件:

    const fs = require('fs');
    const path = require('path');
    const http = require('http');
    
    http.createServer(function(request, response) {
        var filePath = path.join(__dirname, '/files/img.jpeg');
    
        response.writeHead(200);
    
        var readStream = fs.createReadStream(filePath);
        readStream.pipe(response);
    }).listen(2000);
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2019-03-04
      • 2013-06-26
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      相关资源
      最近更新 更多