Как разрешить пользователям загружать изображения с помощью Node/Express, Mongoose и Cloudinary

kak razreshit polzovatelyam zagruzhat izobrazheniya s pomoshhyu nodeexpress mongoose i?v=1656554769

Вы создаете приложение с полным набором данных и хотите разрешить пользователям загружать изображения, но не знаете как? По моему опыту это всегда достигается, если пользователи вводят ссылки и сохраняют эту строку в вашей базе данных. Это отлично работает, быстро и легко, но это тоже своего рода мошенничество. Какое приложение заставляет вас сначала перейти на другой сайт и скачать свое изображение, а затем вернуться и ссылаться на него?

Итак, какое решение?

Позвольте пользователю ввести файл, а затем на сервере загрузите этот файл в облачную службу и сохраните в своей базе данных. Cloudinary отлично подходит для этого. Он предназначен для загрузки медиа. Имеет отличную документацию. Это позволяет производить трансформации. И имеет огромный бесплатный план (10 Гб памяти). Вы можете зарегистрироваться на Cloudinary здесь (я ничего не получаю за это).

Начнем с интерфейса

<form action='/api/images' method="post" enctype="multipart/form-data">
  <input type="file" name="image" />
</form>

Это должно выглядеть знакомо. Все, что вам нужно это форма, которая подает информацию на сервер. Enctype необходим для передачи файлов на сервер.

Это передняя часть решена.

Бек-энд

Теперь в бэкэнде происходит вся магия. Для работы вам понадобятся все обычные зависимости Экспресс и Мангуст. Кроме того, мы будем использовать Мультер, Облачныйи multi-storage-cloudinary. Multer предоставит доступ к файлам, отправленным через форму. Cloudinary используется для настройки и загрузки. multer-storage-cloudinary облегчит процесс их сочетания.

const multer = require("multer");
const cloudinary = require("cloudinary");
const cloudinaryStorage = require("multer-storage-cloudinary");

После того, как зависимости нужны, их нужно настроить. Когда вы зарегистрируетесь в Cloudinary, вам предоставят свои учетные данные API. Я рекомендую хранить их в файле «.env», чтобы сохранить их в безопасности.

Ниже мы также:

  • установка папки для сохранения всех изображений в Cloudinary для этого проекта
  • обеспечение загрузки только файлов «.jpg» и «.png».
  • добавление преобразования, чтобы сохранить высоту и ширину последовательными и управлять размером файла.

Вы можете многое сделать по поводу трансформаций — вы можете посмотреть здесь, если вам интересно.

cloudinary.config({
cloud_name: process.env.CLOUD_NAME,
api_key: process.env.API_KEY,
api_secret: process.env.API_SECRET
});
const storage = cloudinaryStorage({
cloudinary: cloudinary,
folder: "demo",
allowedFormats: ["jpg", "png"],
transformation: [{ width: 500, height: 500, crop: "limit" }]
});
const parser = multer({ storage: storage });

Теперь, когда ваш сервер сконфигурирован для получения и обработки этих изображений, мы можем перейти к настройке маршрута.

В свой маршрут публикации вы просто добавляете парсер, который мы настроили раньше промежуточного программного обеспечения. Это загрузит файл, загрузит его в Cloudinary и вернет объект с информацией о файле. Вы можете получить доступ к этой информации в запросе.

Мне нравится извлекать из этого только нужную информацию, чтобы моя база данных была упорядоченной. По крайней мере, вам захочется:

  • URL-адрес, который может использоваться для отображения изображения на интерфейсе
  • public_id, который позволит вам получить доступ к изображению и удалить его из Cloudinary.
app.post('/api/images', parser.single("image"), (req, res) => {
  console.log(req.file) // to see what is returned to you
  const image = {};
  image.url = req.file.url;
  image.id = req.file.public_id;
  Image.create(image) // save image information in database
    .then(newImage => res.json(newImage))
    .catch(err => console.log(err));
});

Ваше изображение, вероятно, будет частью большего объекта в вашей базе данных. URL-адрес и идентификатор изображения можно сохранить как строки.

*Изображение является примером заполнителя для вашей коллекции базы данных. Замените его своим.

Отображение изображения

Если вы хотите отобразить изображение на интерфейсе, выполните запрос в базу данных, а затем используйте URL-адрес в тегах изображения <img src=imageURL />.

Надеюсь, это поможет вам добавить эту небольшую дополнительную информацию на свои веб-сайты. Это не так уж сложно, если разбить каждый шаг в этом процессе. Это придаст вашему сайту профессиональный оттенок и выделит его.

Если у вас возникли вопросы, задайте их в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован.