在 Node JS 中管道远程文件寻找替代方法
Piping Remote files in Node JS looking for alternative ways
我使用的是 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);
}
我刚刚用 node-fetch
模块尝试了这种方法,它有效。但它不会像 request
模块中那样通过管道传输响应 headers。所以我们需要手动设置所需的 headers。
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
});
}
我使用的是 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);
}
我刚刚用 node-fetch
模块尝试了这种方法,它有效。但它不会像 request
模块中那样通过管道传输响应 headers。所以我们需要手动设置所需的 headers。
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
});
}