#javascript #node.js #amazon-web-services #express #amazon-s3
#javascript #node.js #amazon-веб-сервисы #экспресс #amazon-s3
Вопрос:
Создал файл xlsx в Excel, загруженный с рабочего стола вручную в AWS S3 через консоль. Теперь хотите добавить конечную точку в Node.js экспресс-служба, которая извлекает этот файл из S3 и передает его обратно в приложение браузера javascript.
Кажется, все в порядке с обычным текстовым файлом, но продолжайте получать код состояния HTTP 500 для файла xlsx (и даже csv, созданного в Excel).
пробовал такие варианты, как:
res.send(s3.getObject().toString()); //this works with plain text file
res.send(s3.getObject().toString('utf-8'));
res.send(s3.getObject().toString('binary'));
не повезло ни с одним из них, вызов немедленно завершается ошибкой внутреннего сервера 500.
Ответ №1:
Что-то вроде
s3.headObject(params,
(err, data)=>{
if (err) {
return res.status(500).end(err.message);
}
// Add the content type to the response (it's not propagated from the S3 SDK)
res.set({
'Content-Type': data.ContentType,
'Content-Length': data.ContentLength,
'Last-Modified': data.LastModified,
'ETag': data.ETag
});
s3.getObject(params).createReadStream().pipe(res)
}
);