Как я могу получить Коа для обслуживания изображения, которое было получено из s3 через getObject? - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь написать свой собственный сервер изменения размера изображения (потому что миру определенно нужен другой), основываясь на примере, найденном на https://aws.amazon.com/blogs/networking-and-content-delivery/resizing-images-with-amazon-cloudfront-lambdaedge-aws-cdn-blog/

Думал, что я бы дал Коа пока я был на нем, но мне не повезло с использованием Koa вместо стандартной http-библиотеки Node:

require('dotenv').config()
const Koa = require('koa');
const app = new Koa();
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
    apiVersion: '2006-03-01',
    params: {
        Bucket: process.env.STORAGE_BUCKET_NAME
    }
});

app.use(async ctx => {
    const image = await s3.getObject(
        {Key: 'media/uploads/ad901924db/lint.jpg'},
        err => { if (err) return err }
    ).promise()

    ctx.body=image.Body;
    ctx.type=".jpg";
});

Я также пробовал несколько вариантов потоковой передачи:

    const imageStream = await s3.getObject(
        {Key: 'media/uploads/ad901924db/lint.jpg'},
        err => { if (err) return err }
    ).createReadStream()

    ctx.body=imageStream.pipe(PassThrough());
    ctx.type=".jpg";

Мне не удалось получить ничего, кроме зашифрованного изображения или следующего сообщения об ошибке: The image “http://localhost:3000/” cannot be displayed because it contains errors.

Вот прямой URL-адрес изображения, которое я пытаюсь использовать, пока не получу эту работу динамически: http://xiwcx-media.s3.amazonaws.com/media/uploads/ad901924db/lint.jpg

Итак, я что-то в корне неправильно понимаю о Koa или s3? Мой образ просто поврежден, я не понимаю. Любая помощь приветствуется. Дайте мне знать, могу ли я предоставить дополнительную информацию.

...