【问题标题】:Keep original file with multer-s3-transform使用 multer-s3-transform 保留原始文件
【发布时间】:2020-06-29 18:56:12
【问题描述】:

如果我要上传图片,我希望 multer s3 保留原始图片,并创建缩略图。

换句话说。我只想在第一次转换中更改文件名。

下面的代码运行良好,但问题是 sharp() 修改了原始代码。假设我上传了一个 gif 文件,动画将停止工作。

我试图从原始变换对象中删除变换箭头函数,但这会使代码崩溃并出现错误dest.on is not a function

我已经尝试删除整个变换对象,但由于 shouldTransform 是真实的,它根本不会上传原件。

我尝试将sharp() 替换为null,但这给了我这个错误Cannot read property 'on' of null

根据文档,我应该能够在 sharp() 位置输入一个字符串,但这也会使代码崩溃。 示例:cb(null, "something.jpeg"); 错误:dest.on 不是函数

multer-s3-transform 的文档有点欠缺,所以我现在只是暴力破解。

const awsStorage = multerS3({
    s3,
    bucket: process.env.AWS_BUCKET_NAME,
    shouldTransform: (transformReq, file, cb) => {
        cb(null, /^image/i.test(file.mimetype));
    },
    key: (transformReq, file, cb) => {
        const splitFileName = file.originalname.split('.');
        const fileEnding = splitFileName[splitFileName.length - 1];
        cb(null, `files/${dateNow}.${fileEnding}`);
    },
    transforms: [
        {
            id: 'original',
            key: (transformReq, file, cb) => {
                const splitFileName = file.originalname.split('.');
                const fileEnding = splitFileName[splitFileName.length - 1];
                cb(null, `files/${dateNow}.${fileEnding}`);
            },
            transform: (transformReq, file, cb) => {
                cb(null, sharp()); // This is where I'm struggling
            },
        },
        {
            id: 'thumbnail',
            key: (transformReq, file, cb) => {
                const splitFileName = file.originalname.split('.');
                const fileEnding = splitFileName[splitFileName.length - 1];
                cb(null, `thumbnails/${dateNow}.${fileEnding}`);
            },
            transform: (transformReq, file, cb) => {
                cb(
                    null,
                    sharp()
                        .resize(200, 200)
                        .png()
                );
            },
        },
    ],
});

【问题讨论】:

    标签: javascript node.js amazon-s3 multer multer-s3


    【解决方案1】:

    你能从第一个变换对象(原始)中删除变换块吗?

    transform: (transformReq, file, cb) => {
       cb(null, sharp()); // This is where I'm struggling
    }
    

    如果您只是想重命名文件,那么关键部分就足够了。您在下面的缩略图上正确使用了Sharp。

    【讨论】:

    • 这可能会解决问题,但我无法确认,因为我最终构建了自己的文件上传器以获得更好的控制。
    猜你喜欢
    • 2020-06-20
    • 2019-09-30
    • 2016-03-05
    • 2015-06-09
    • 2019-06-24
    • 2021-07-11
    • 2020-02-16
    • 2019-10-10
    • 2016-01-22
    相关资源
    最近更新 更多