Dans ce didacticiel, nous allons vous montrer comment créer un serveur avec Express.js qui gère les téléchargements de fichiers et effectue un traitement dynamique des images comme le redimensionnement, la conversion de format et les ajustements de qualité à l'aide de Sharp<.>.
Conditions préalablesNode.js et npm sont installés. Nous utiliserons les bibliothèques suivantes dans ce tutoriel :
mkdir image-upload-server cd image-upload-server npm init -y
Vous pouvez installer toutes les dépendances en exécutant :
npm install express multer sharp cors
mkdir original-image transform-image
Express.js. Créez un fichier appelé index.js à la racine de votre projet et ajoutez le code suivant pour configurer le serveur :
const express = require('express'); const cors = require('cors'); const multer = require('multer'); const path = require('path'); const sharp = require('sharp'); const fs = require('fs'); const app = express(); // Middleware for CORS and JSON parsing app.use(cors()); app.use(express.json()); app.use(express.urlencoded({ extended: true }));
Multer pour gérer les téléchargements de fichiers. Multer nous permet de stocker les fichiers téléchargés dans un répertoire spécifié.
Ajoutez le code suivant pour configurerMulter :
// Configure multer for file storage const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'original-image'); // Ensure the 'original-image' directory exists }, filename: function (req, file, cb) { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9); cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname)); } }); const upload = multer({ storage: storage });
POST pour les téléchargements de fichiers. L'utilisateur enverra un fichier au serveur et le serveur stockera le fichier dans le répertoire de l'image d'origine.
Ajoutez le code suivant pour gérer le téléchargement du fichier :
// File upload endpoint app.post('/upload', upload.single('file'), (req, res) => { const file = req.file; if (!file) { return res.status(400).send({ message: 'Please select a file.' }); } const url = `http://localhost:3000/${file.filename}`; // Store file path with original filename as the key db.set(file.filename, file.path); res.json({ message: 'File uploaded successfully.', url: url }); });
Maintenant, créons un point de terminaison GET pour servir les fichiers téléchargés. Si des paramètres de requête sont fournis (par exemple, redimensionnement, conversion de format), le serveur traitera l'image en conséquence.
Ajoutez le code suivant pour diffuser les fichiers téléchargés :
mkdir image-upload-server cd image-upload-server npm init -y
Ce point de terminaison :
La bibliothèque Sharp nous permettra d'effectuer diverses transformations sur les images, telles que le redimensionnement, la conversion de format et les ajustements de qualité.
Ajoutez la fonction processImage qui gère ces transformations :
npm install express multer sharp cors
Cette fonction :
Enfin, démarrez le serveur en ajoutant le code suivant :
mkdir original-image transform-image
Cela démarrera le serveur sur le port 3000.
Pour tester la fonctionnalité de téléchargement de fichiers à l'aide de Postman, procédez comme suit :
Lancez Postman sur votre ordinateur. Si Postman n'est pas installé, vous pouvez le télécharger ici.
Exemple de réponse :
mkdir image-upload-server cd image-upload-server npm init -y
Maintenant, testons la récupération de l'image avec les transformations à l'aide du Navigateur.
Pour récupérer l'image, ouvrez simplement votre navigateur et accédez à l'URL que vous avez reçue après avoir téléchargé le fichier. Par exemple, si l'URL de réponse était :
npm install express multer sharp cors
Tapez simplement cette URL dans la barre d'adresse de votre navigateur et appuyez sur Entrée. Vous devriez voir l'image originale affichée.
Testons maintenant les transformations d'images dynamiques en ajoutant des paramètres de requête pour le redimensionnement, la conversion de format et l'ajustement de la qualité.
Dans votre navigateur, ajoutez les paramètres de requête à l'URL de l'image pour tester les transformations. Voici quelques exemples :
mkdir original-image transform-image
const express = require('express'); const cors = require('cors'); const multer = require('multer'); const path = require('path'); const sharp = require('sharp'); const fs = require('fs'); const app = express(); // Middleware for CORS and JSON parsing app.use(cors()); app.use(express.json()); app.use(express.urlencoded({ extended: true }));
// Configure multer for file storage const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'original-image'); // Ensure the 'original-image' directory exists }, filename: function (req, file, cb) { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9); cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname)); } }); const upload = multer({ storage: storage });
// File upload endpoint app.post('/upload', upload.single('file'), (req, res) => { const file = req.file; if (!file) { return res.status(400).send({ message: 'Please select a file.' }); } const url = `http://localhost:3000/${file.filename}`; // Store file path with original filename as the key db.set(file.filename, file.path); res.json({ message: 'File uploaded successfully.', url: url }); });
Le navigateur affichera l'image traitée et vous pourrez confirmer si la transformation a été appliquée correctement.
Ce serveur de téléchargement et de traitement d'images fournit une solution robuste pour gérer les téléchargements, les transformations et les récupérations d'images. Utilisant Multer pour la gestion des fichiers et Sharp pour le traitement des images, il prend en charge le redimensionnement, la conversion de format et les ajustements de qualité via les paramètres de requête. Le système met efficacement en cache les images traitées pour optimiser les performances, garantissant ainsi une livraison rapide et réactive des images. Cette approche simplifie la gestion des images pour les applications nécessitant des transformations d'images dynamiques, ce qui en fait un outil polyvalent pour les développeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!