1

次のライブラリを使用して画像を圧縮したい https://github.com/imagemin/imagemin

問題は、ユーザーがフォームを使用してアップロードするときです。フォームから画像の最小プラグインにファイルの詳細をプラグインするにはどうすればよいですか? たとえば、ファイル フォーム フィールドが example-image と呼ばれる場合、そのファイル フォーム フィールドを image min プラグインにプラグインして、画像を圧縮できるようにするにはどうすればよいですか?

私は試した:

req は express/nodejs req からのものです

  var filebus = new Busboy({ headers: req.headers }),
   promises = [];

    filebus.on('file', function(fieldname, file, filename, encoding, contentType) {

        var fileBuffer = new Buffer(0),
            s3ImgPath;

        if (file) {
            file.on('data', function (d) {
                fileBuffer = Buffer.concat([fileBuffer, d]);
            }).on('end', function () {
                Imagemin.buffer(fileBuffer, {
                    plugins: [
                        imageminMozjpeg(),
                        imageminPngquant({quality: '80'})
                    ]
                }).then(function (data) {
                    console.log(data[0]);
                    if (s3ImgPath) {
                        promises.push(this.pushImageToS3(s3ImgPath, data[0].data, contentType));
                    }
                });
            }.bind(this));
        }
    });

しかし、問題は、S3 にアップロードできるファイルのバッファがあることです。ファイルを build/images フォルダーに入れたくありません。ファイルのバッファを取得して圧縮し、そのバッファを s3 にアップロードしたいと考えています。image min を使用して、html フォームを介してファイルアップロードのバッファを取得し、それを s3 にアップロードするにはどうすればよいですか?

4

1 に答える 1

4

出力パラメーターのドキュメントは、それがオプションであることを示しています (確かに、関数宣言はそうではありませんでした。これは混乱を招く可能性があります)。

出力

タイプ: 文字列

ファイルが書き込まれる宛先フォルダーを設定します。宛先が指定されていない場合、ファイルは書き込まれません。

したがって、ストレージへのファイルの書き込みをオプトアウトして、メモリ内の出力のみを使用できます。

imagemin([file.path], {
  plugins: [
      imageminMozjpeg(),
      imageminPngquant({quality: '65-80'})
  ]
}).then(files => {
  // upload file to S3
});
于 2016-10-26T16:00:48.463 に答える