Не удается вернуть файл xlsx из Node.js (экспресс) сервис, который получает его из корзины S3 для использования браузерным приложением

#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)
        }
    );