Как использовать GraphicsMagick с узлом для отправки нового файла изображения в AWS S3? - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь загрузить изображение на S3, но я продолжаю обнаруживать, что изображения телефона имеют повернутые изображения, и я узнал, что это происходит из-за данных EXIF. Я нашел эту библиотеку с именем graphicsmagick, которая предназначена для того, чтобы иметь возможность избавиться от данных EXIF, и я также решил, что хочу уменьшить размеры изображений до 500 пикселей в ширину и получить любую высоту. Проблема, которую я не могу понять, заключается в том, как получить файл после его изменения. Кажется, что во всех примерах graphicsmagick показано, как записать изображение в файл на диске, но я хочу взять данные файла и загрузить их в AWS S3.

Пока у меня есть:

let file_extension = file.name.split('.').pop();//grab the file extension of for saving in the db
        let key = `${user_id}/${UUID()}.${file_extension}`; //create a unique key to save in S3 based on users id
        let params = {Bucket: S3_name, Key: key, Body: file.data};

        //resize image
        let new_image = gm(file.data)
            .resize(500)
            .noProfile()
            .write() <-- this is as far as I got.

        //upload
        let result = new Promise(resolve=>{
            s3.upload(params, function(err, result){
                if (err) {
                    throw new Error('Could not upload photo');
                }else {
                    resolve(result);
                }
            })
        });

        result = await result;

1 Ответ

0 голосов
/ 07 декабря 2018

С г документы:

Вывод изображения

write - записывает обработанные данные изображения в указанное имя файла

stream - предоставляет ReadableStream с обработанными данными изображения

toBuffer - возвращает изображение в виде буфера вместо потока

Так что в вашем случае вместо .write() вы можете использовать:

.toBuffer('png',function (err, buffer) {
  if (err) return throw err;
  console.log('done!');
})

Теперь у вас есть buffer, который можно использовать как Body для загрузки в логику S3

...