0
파일과 json 데이터로 게시물 요청을받는 서비스가 있습니다. 나는 app.js에서 body-parser 패키지를 사용합니다. 파일을 "filer"서비스로 보내고 그 대답을 처리하고 싶지만 json 콘텐츠도 처리해야하고 파일러가 응답 한 후에 일부 작업을 수행해야하므로 요청을 파이프하고 싶지 않습니다.받은 파일을 저장하지 않고 보내고 익스프레스 js와 busboy로 파이프 보내기
const Busboy = require('busboy');
const request = require('request');
const sendFile = (req, file, callback) => {
return request.post({
uri: 'http://localhost:5000/stream',
headers: req.headers,
formData: { value: file }
}, (err, resp, body) => {
if (err) return callback(err);
return callback();
});
};
app.post('/route', (req, res, next) {
const busboy = new Busboy({ headers: req.headers });
busboy.on('file', (fieldName, file) => {
file.on('error', err => reject(err));
return sendFile(req, file, (err, link) => {
file.resume();
if (err) return reject(err);
});
});
busboy.on('field', (fieldName, val) => {
// process the json here...
});
busboy.on('finish',() => {
console.log('busboy.on(finish)');
return next();
});
req.pipe(busboy);
}
다음 파일러 서비스 :
app.post('/stream', (req, res, next) => {
const busboy = new Busboy({ headers: req.headers });
// here we are ok
busboy.on('file', function (fieldName, file, name) {
// but this part never run
res.send(200, { fileId: fileDoc._id });
});
return req.pipe(busboy);
});
이 Unfortunatelly 파일러 서비스 대답하지, 내가 모른다는 어디에서 누락 된 부분입니다.
file.resume()
을
busboy.on('file')
안에 넣으려고했으나 도움이되지 않았습니다.
로컬에 파일을 저장하지 않으려 고 시도합니다.이로드는 불필요합니다. 주로 파일에서 수정할 내용이 없기 때문입니다. – kree
나는 busboy의 스트림 문제가 formdata에 사용된다고 생각합니다. requestjs에 대한 formData는 아마도 유효한 파일 스트림으로 인식하지 못하고 있습니다. 나는이 문제를 안고있다. 당신이 할 수있는 유일한 다른 방법은이 스트림을 파이프하여 직접 요청한 다음 close 이벤트 콜백을 요청하는 것입니다. –