将二进制文件从 stdout 传输到 http 响应
pipe binary file from stdout to http response
是否可以将 post stdout 流式传输到 formData?
此代码似乎有效但无效
const shell = require('shelljs')
const request = require('request')
const isStream = require('isstream')
const file = shell.exec('cat file.jpg', { silent: true, async: true })
console.log(isStream(file.stdout)) // true
const response = request
.post({
url,
formData: {
image: file.stdout
}
}, (err, httpResponse, body) => {
console.log(err)
})
我也试过file.stdout.pipe(PassThrough())
但没用
PS:
我只是这样做:
cat image.jpg | curl -XPOST https://domain/process --form user_id=123456 --form image=@-
是否可以用节点实现上面的内容?
PS:
我知道有 fs.createReadStream
但在实际项目中,我从 stdout
上的外部应用程序流文件接收图像
我会回答我自己的问题
const spawn = require('child_process').spawn
const ch = spawn('cat', ['./file.jpg'])
let buf = new Buffer(0)
ch.stdout
.on('data', d => {
buf = Buffer.concat([buf, d])
})
.on('end', () => {
send(buf)
})
function send (data) {
request
.post({
url,
formData: {
image: {
value: data,
options: {
filename: 'test.jpg'
}
}
}
}, (err, httpResponse, body) => {})
}
是否可以将 post stdout 流式传输到 formData?
此代码似乎有效但无效
const shell = require('shelljs')
const request = require('request')
const isStream = require('isstream')
const file = shell.exec('cat file.jpg', { silent: true, async: true })
console.log(isStream(file.stdout)) // true
const response = request
.post({
url,
formData: {
image: file.stdout
}
}, (err, httpResponse, body) => {
console.log(err)
})
我也试过file.stdout.pipe(PassThrough())
但没用
PS:
我只是这样做:
cat image.jpg | curl -XPOST https://domain/process --form user_id=123456 --form image=@-
是否可以用节点实现上面的内容?
PS: 我知道有 fs.createReadStream 但在实际项目中,我从 stdout
上的外部应用程序流文件接收图像我会回答我自己的问题
const spawn = require('child_process').spawn
const ch = spawn('cat', ['./file.jpg'])
let buf = new Buffer(0)
ch.stdout
.on('data', d => {
buf = Buffer.concat([buf, d])
})
.on('end', () => {
send(buf)
})
function send (data) {
request
.post({
url,
formData: {
image: {
value: data,
options: {
filename: 'test.jpg'
}
}
}
}, (err, httpResponse, body) => {})
}