我遇到以下情况:使用NodeJS返回包含以下项目的多部分/混合响应,我们控制通信的两端,以便我们能够消除互操作性问题。
--whoop Content-Disposition: attachment; name="zip"; filename="tobi.zip" Content-Type: application/zip ... data here ... --whoop Content-Disposition: form-data; name="name" Content-Type: text/plain Tobi --whoop--
我需要将此流回流给用户,以便他们可以处理JSON文件,如果需要,可以展开他们感兴趣的特定ZIP文件。
从API指南http://expressjs.com/api.html开始,我看不出这是怎么回事?我已正确返回单个ZIP文件,但需要支持此业务方案。
我试图创建类似于以下内容的内容: HTTP multipart response using Perl or PHP
res应该包含一个JSON文件和所有相关的ZIP。
感谢任何帮助。感谢。
Ĵ
答案 0 :(得分:1)
解决方案看起来像这样 - 需要将每个项目调用到响应中。
res.writeHead(200, {
'Content-Type': 'multipart/x-mixed-replace; charset=UTF-8; boundary="' + SNAPSHOT_BOUNDARY + '"',
Connection: 'keep-alive',
Expires: 'Fri, 01 Jan 1990 00:00:00 GMT',
'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate',
Pragma: 'no-cache'
});
feed.snapshots.forEach(function (item) {
writeResponse(item);
});
function writeResponse(item) {
var buffer = new Buffer(0);
var readStream = getGridFs().createReadStream({root: 'items', _id: snapshotItem._id});
readStream.on('error', function (err) {
if (err) {
// handle error
}
});
readStream.on('data', function (chunk) {
buffer = Buffer.concat([buffer, chunk]);
});
readStream.on('end', function () {
res.write('\n\n' + SNAPSHOT_BOUNDARY + '\n');
res.write('Content-Disposition: filename="' + item.filename + '" \n');
res.write('Content-Type: application/zip \n');
res.write('Content-length: ' + buffer.length + '\n\n');
res.write(buffer);
});
}
仍然遇到超级解析多部分响应的问题 - 在https://github.com/felixge/node-formidable/issues/348
打开故障单