在 Node JS 中管道远程文件寻找替代方法

Posted

技术标签:

【中文标题】在 Node JS 中管道远程文件寻找替代方法【英文标题】:Piping Remote files in Node JS looking for alternative ways 【发布时间】:2020-12-26 15:33:40 【问题描述】:

我使用的是 request 模块,现在已弃用。在不存储在服务器中的情况下通过管道传输远程文件很有用。因此寻找与 Node-fetch、GOT、Axios 等相同功能的替代解决方案。

import request from 'request';

    (req, res)  
       return request(`http://files.com/image.jpg`)
            .on('error', (err) => 
              log.error('error fetching img url: %O', err);
              res.status(500).end('error serving this file');
            )
            .on('response', (urlRes) => 
              if (urlRes.statusCode === 304) return;
              urlRes.headers['content-disposition'] = `inline;filename="$slug"`;
            )
            .pipe(res);
        

【问题讨论】:

【参考方案1】:

我刚刚用node-fetch 模块尝试过这种方式,它可以工作。但它不像 request 模块中那样通过管道传输响应标头。所以我们需要手动设置所需的标题。

import fetch from 'node-fetch';
(req, res) 
 fetch('http://files.com/image.jpg').then((response) => 
      res.set(
        'content-length': response.headers.get('content-length'),
        'content-disposition': `inline;filename="$slug"`,        
        'content-type': response.headers.get('content-type'),        
      )
      response.body.pipe(res);
      response.body.on('error', () => ) // To handle failure
    );

【讨论】:

以上是关于在 Node JS 中管道远程文件寻找替代方法的主要内容,如果未能解决你的问题,请参考以下文章

将 Node.js+Socket.io 包装成 OSX 可执行文件的可靠方法? (或用作替代品的 C/C++/Objective-C 库)

如何使用 node.js 顺序读取 csv 文件(使用流 API)

node.js - 将图像缓存到文件系统并将图像通过管道传输到响应

如何从 Node.js 访问、检索、存储和删除文件到远程文件服务器?

Node.js 合并音频和视频流并将其通过管道传输到客户端

Node.js fs.readfile/异步文件访问:在回调中获取当前文件