我正在尝试用NodeJS+ExpressJS构建一个简单的后台网站,它允许用户从客户端下载一些ZIP文件。
然而,当我在Postman中测试逻辑时,返回的数据是一个符号字符串,表明它是一个二进制文件,而不是.zip文件。
以下是代码片段:
app.post('/', (req, res) => {
try {
const { specialID } = req.body;
if (!specialID) {
res.writeHead(400, { 'Content-Type': 'text/plain' });
return res.end('specialID needs to be specified');
}
const specialIDsMap = {
one: 1,
22: 2,
'33threee': 3,
};
const targetFile = specialIDsMap[specialID];
const filePath = `./zips/${targetFile}.zip`;
const fileName = 'test-file.zip';
fs.exists(filePath, (exists) => {
if (exists) {
res.writeHead(200, {
'Content-Type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename=' + fileName,
});
fs.createReadStream(filePath).pipe(res);
} else {
res.writeHead(400, { 'Content-Type': 'text/plain' });
res.end('ERROR File does not exist');
}
});
我该怎么做才能确保服务器给我的是.zip文件而不是二进制文件?
因为您的文件不是压缩文件,请考虑使用ArchiverJs可能会解决您的问题。
代码示例:
res.writeHead(200, {
'Content-Type': 'application/zip',
'Content-disposition': 'attachment; filename='+fileName
});
let zip = Archiver('zip');
zip.pipe(res);
zip.file(filePath , { name: fileName })
.finalize();