我目前正在开发一个带有Electron前端和ASP.NET Core后端的应用程序。 Electron应用程序需要将一系列文件压缩到存档中,然后将zip文件上传到后端。我正在使用archiver创建一个zip存档。我可以通过将存档输出到文件,然后打开文件的读取流并进行上传来完成我的需要。
我的目标是避免将此文件临时写入文件系统并直接上传流。我可能完全不在这里,但这是我现有的代码:
const archiver = require('archiver');
const str = require('stream');
const request = require('request');
// . . .
const archive = archiver('zip', {
zlib: { level: 1 } // Set the compression level.
});
// . . . Add files to archive
archive.finalize();
request.post(/* upload url */, {
formData: {
// Set additional form properties
file: {
options: {
fileName: "test.zip"
},
value: archive
}
}
}, function(err, res, body) {
// Handle response
});
我按预期收到请求,但在读取~50个字节后,asp抛出System.IO.IOException: Unexpected end of Stream
。
处理此流的正确方法是什么?
答案 0 :(得分:0)
事实证明,答案很简单。我的代码在两端都有效,但是,我的流长度未知,因此需要标头Transfer-Encoding: chunked
才能向ASP.NET表明该流的长度未知。只需将此标头添加到请求即可解决问题:
request.post(/* upload url */, {
headers: {
"Transfer-Encoding": "chunked" // This is all that was needed.
},
formData: {
// Set additional form properties
file: {
options: {
fileName: "test.zip"
},
value: archive
}
}
}, function(err, res, body) {
// Handle response
});