Загрузка изображений из S3 с помощью AWS-SDK Nodejs загружает поврежденное изображение - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь загрузить изображения из aws s3, используя AWS-SDK для nodejs. Файл действительно загружается, и размер также правильный. Однако файл поврежден и показывает ошибку распаковки в IDAT.

async download(accessKeyId, secretAccessKey, region, bucketName, baseImage) {
        console.log("Entered download");
        const s3 = new AWS.S3({region: region});
        const params = {
             Bucket: bucketName,
             Key: `base/${baseImage}`
         };

        const outStream = fs.createWriteStream(this.config.baseFolder + baseImage);
        const awsStream = s3.getObject(params, (uerr, data) => {
            if(uerr) throw uerr;
            console.log(`Base file downloaded successfully!`)
        }).createReadStream().pipe(outStream);

        awsStream.on('end', function() {
            console.log("successfully Downloaded");
        }).on('error', function() {
            console.log("Some error occured while downloading");
        });
    }

Вот ссылка, по которой я перешел - https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/requests-using-stream-objects.html Файл должен быть загружен без ошибок. Я попытался выполнить поиск в стеке, и есть некоторые похожие вопросы, однако они используют nodejs для доставки вывода во внешний интерфейс, и эти решения не работают для меня.

1 Ответ

0 голосов
/ 18 июня 2019

Не было необходимости устраивать беспорядок и делать все это ... Этого можно добиться непосредственно с помощью -

async download(accessKeyId, secretAccessKey, region, bucketName, baseImage) {
        console.log("Starting Download... ")
        const s3 = new AWS.S3({
            accessKeyId: accessKeyId,
            secretAccessKey: secretAccessKey,
            region: region
        });
        const params = {
            Bucket: bucketName,
            Key: `base/${baseImage}`
         };

        s3.getObject(params, (err, data) => {
            if(err) console.error(err);
            console.log(this.config.baseFolder + baseImage);
            fs.writeFileSync(this.config.baseFolder + baseImage, data.Body);
            console.log("Image Downloaded.");
        });
    }
...