Я использую Express для создания веб-API. В следующем примере данные SVG преобразуются в PNG и загружаются в S3.
const svg2png = require("svg2png");
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
app.post('/svg_to_png', function (req, res) {
let params = req.body
// STEP 1: Convert SVG to PNG:
var outputBuffer = svg2png.sync(params.svg_data, {});
// STEP 2: Upload to S3:
let s3_params = {
Bucket:params.bucket,
Key:params.key,
Body:outputBuffer,
ContentType:'image/png',
ContentDisposition:'inline',
ACL: 'public-read'
}
result = s3.putObject(s3_params,function(err,data){
if (err){
return err;
}
return 'success';
});
// Return Image URL:
let image_url = 'https://s3.amazonaws.com/' + params.bucket + '/' + params.key
res.send(image_url)
})
Я хочу, чтобы API ответил URL-адресом преобразованного изображения, которое запрашивающий клиент может немедленно загрузить. Проблема заключается в том, что операция загрузки S3 выполняется асинхронно c, поэтому при доставке ответа изображение еще не существует в расположении URL-адреса, что вынуждает клиента опросить его существование.
Есть ли способ заставить веб-сервер отвечать только после завершения загрузки S3?