Моя конечная точка API возвращает файл Excel, передаваемый с S3. Он работает на локальном компьютере, но при тестировании на API-шлюзе файл поврежден. Вот мой код API:
const downloadContentFromS3 = async function(bucket, file) {
return new Promise((resolve, reject) => {
streamFileFromS3(bucket, file, (error, s3buffer) => {
if (error) return reject(error);
return resolve(s3buffer);
});
});
};
const streamFileFromS3 = async function(bucket, fileName, callback) {
const params = {
Bucket: bucket,
Key: fileName,
};
const buffers = [];
const stream = s3.getObject(params).createReadStream();
stream.on('data', data => buffers.push(data));
stream.on('end', () => callback(null, Buffer.concat(buffers)));
stream.on('error', error => callback(error));
};
downloadExcelFile: async (req, res) => {
try {
const fileName = 'myFilename';
const workbook = await downloadContentFromS3(
'bucket-name'
fileName
);
const workbook = xlsx.read(buffer);
res.setHeader('Content-disposition', `attachment; filename=${fileName}`);
res.setHeader(
'Content-type',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
);
const wbout = xlsx.write(workbook, { bookType: 'xlsx', type: 'buffer' });
res.status(200).send(Buffer.from(wbout));
} catch (error) {
throw new OriolaError(error.message);
}
},
Что я пробовал до сих пор: Настройте двоичные типы носителей, как показано на рисунке:
Кроме того, попытался установить RESPONSE HEADER на Content-Type и Content-Disposition, но безрезультатно. Проблема, кажется, сохраняется. Любые идеи и помощь приветствуются.
РЕДАКТИРОВАТЬ: Я также пытался установить двоичный тип */*
в настройках, но это также не помогает.