NodeJS-KOA: Изображения, загруженные в S3, разбиты

#node.js #amazon-s3 #koa

Вопрос:

Я загружаю изображения в корзину S3. Эти изображения сохраняются, но при загрузке или просмотре на S3 они ломаются. Однако иногда кажется, что код работает нормально. Служебная функция, которую я использую для загрузки изображения, такова:

 Upload(fileName, data, s3Folder) {
    let randomId = crypto.randomBytes(16).toString("hex");
    AWS.config.update({ region: awsConstants.S3BUCKET.Region, accessKeyId: awsConstants.S3BUCKET.AccessKeyId, secretAccessKey: awsConstants.S3BUCKET.SecretAccessKey });
    var s3 = new AWS.S3();
    var imageName = randomId   fileName;
    
    //In case uploading to a specific folder
    if (s3Folder) {
        imageName = s3Folder   '/'   randomId   fileName
    }
    var params = {
        Bucket: awsConstants.S3BUCKET.BucketName,
        Key: imageName,
        Body: data,
        ContentType: mime.lookup(fileName)
    };
    return new Promise((resolve, reject) => {
        s3.putObject(params, function (err, data) {
            if (err) {
                console.log('Error: ', err);
                reject(new Error(err.message));
            } else {
                resolve({
                    response: data,
                    uploadedFileName: imageName
                });
            }
        });
    });
}
 

Код контроллера, вызывающий эту утилиту:

 async uploadImage(ctx) {
    try {
        var file = ctx.request.file;

        if (file) {
            const fileData = ctx.request.file.buffer;//Do get buffer
            //const fileData = ctx.request.file.buffer.toString('binary'); tried this as well
            
            
            //Utility code that uploads image
            var resp = await s3Hander.Upload(file.originalname, fileData, "Profile");

            if (resp amp;amp; resp["response"]["ETag"]) {
                ctx.status = httpConstants.HTTP_SUCCESS_OK;             
                ctx.body = { response: resp, S3Data: {} };
            }
            else {
                ctx.status = httpConstants.HTTP_INTERNAL_SERVER_ERROR;
                ctx.body = { response: 'Unable to upload image!' };
            }
        }
        else {
            ctx.status = httpConstants.HTTP_BAD_REQUEST;
            ctx.body = { response: 'File not found!' };
        }

    } catch (error) {
        ctx.status = httpConstants.HTTP_INTERNAL_SERVER_ERROR;
        ctx.body = { response: 'Unable to upload image!' };
    }

}
 

Я почти уверен, что данные, которые я храню на S3, имеют некоторые проблемы, поскольку их нельзя просматривать из корзины, а также из консоли AWS. Здесь что-то не так? Я использую KOA в качестве промежуточного программного обеспечения

 const multer = require('@koa/multer');
const upload = multer();
 

Router:

 applicationRouterManager.post('/uploadImage', upload.single('avatar'), ProfileController.uploadImage);