Node.js-服务文件可直接从浏览器下载而无需html

时间:2018-11-15 20:46:07

标签: node.js express

我想知道是否可以根据GET请求直接从浏览器下载文件。

让我解释一下:

我有一个node.js API,我正在使用它来提供一些文件,而当我从浏览器中对资源发出get请求时,我想要直接下载它们。如果可能,我必须发送什么?完整的二进制文件,通过响应传递...?这让我有些困惑。

代码如下:

  

server.js

app.get('/document', async (req, res) => {
    const { filename } = req.query;

    const filepath = `${os.tmpdir()}/${filename}`
    try {
        var file = fs.readFileSync(filepath);
        return res.status(200).send({ msg: 'File read successfully', file: file })
    } catch (err) {
        return res.send({ msg: 'Problem reading file.', err: err.toString() })
    }

})

1 个答案:

答案 0 :(得分:0)

找到了解决问题的两种方法;

  

1。使用express中的res.download方法

try {
    return res.download(filepath [, filename])
} catch (err) {
    return res.send({ err: 'Problem reading file.', msg: err.toString() })
}
  
      
  1. 发送二进制文件和特殊标头
  2.   
try {
        var file = fs.readFileSync(filepath);
        res.setHeader('Content-disposition', `attachment; filename=${filename}`);
        return res.status(200).send(file)
    } catch (err) {
        return res.send({ err: 'Problem reading file.', msg: err.toString() })
    }