Heim > Web-Frontend > js-Tutorial > Hauptteil

Erstellen einer Express-Web-App für Datei-Uploads und dynamische Bildverarbeitung im Handumdrehen

Mary-Kate Olsen
Freigeben: 2024-11-12 01:15:02
Original
834 Leute haben es durchsucht

Building an Express web App for File Uploads and Dynamic Image Processing on the fly

Leitfaden: Erstellen einer Express-Web-App für Datei-Uploads und dynamische Bildverarbeitung

In diesem Tutorial zeigen wir Ihnen, wie Sie mit Express.js einen Server erstellen, der Datei-Uploads verarbeitet und dynamische Bildverarbeitung wie Größenänderung, Formatkonvertierung und Qualitätsanpassungen mit Sharp.

Voraussetzungen

Bevor wir beginnen, stellen Sie sicher, dass Sie

Node.js und npm installiert haben. Wir werden in diesem Tutorial die folgenden Bibliotheken verwenden:

  1. Express.js – zum Einrichten des Servers.
  2. Multer – für die Abwicklung von Datei-Uploads.
  3. Scharf – für die Bildverarbeitung.
  4. CORS – um ursprungsübergreifende Anfragen zu ermöglichen.

Schritt 1: Einrichten des Projekts

Erstellen Sie zunächst ein neues Verzeichnis für Ihr Projekt:


mkdir image-upload-server
cd image-upload-server
npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Dadurch wird ein neuer Projektordner erstellt und eine package.json-Datei initialisiert.

Sie können alle Abhängigkeiten installieren, indem Sie Folgendes ausführen:


npm install express multer sharp cors 
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Erstellen Sie die erforderlichen Verzeichnisse

Wir benötigen zwei Verzeichnisse:

    Originalbild zum Speichern der ursprünglich hochgeladenen Bilder.
  • transform-image, um die verarbeiteten Bilder zu speichern.
Erstellen Sie diese Verzeichnisse, indem Sie Folgendes ausführen:


mkdir original-image transform-image
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 2: Richten Sie den Express-Server ein

Jetzt richten wir den Basisserver mit

Express.js ein. Erstellen Sie eine Datei namens index.js im Stammverzeichnis Ihres Projekts und fügen Sie den folgenden Code hinzu, um den Server einzurichten:

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 }));
Nach dem Login kopieren
Nach dem Login kopieren
Diese Grundkonfiguration umfasst:

  • CORS um ursprungsübergreifende Anfragen zu ermöglichen.
  • express.json() und express.urlencoded() zum Parsen eingehender Anforderungsdaten.

Schritt 3: Konfigurieren Sie Multer für Datei-Uploads

Wir werden

Multer verwenden, um Datei-Uploads abzuwickeln. Mit Multer können wir hochgeladene Dateien in einem angegebenen Verzeichnis speichern.

Fügen Sie den folgenden Code hinzu, um

Multer zu konfigurieren:

// 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 });
Nach dem Login kopieren
Nach dem Login kopieren
Dieses Setup stellt sicher, dass:

    Die hochgeladenen Dateien werden im Originalbildordner gespeichert.
  • Jede Datei erhält einen eindeutigen Namen basierend auf dem aktuellen Zeitstempel und einer Zufallszahl.

Schritt 4: Erstellen Sie den Datei-Upload-Endpunkt

Als nächstes erstellen Sie einen

POST-Endpunkt für Datei-Uploads. Der Benutzer sendet eine Datei an den Server und der Server speichert die Datei im Originalbildverzeichnis.

Fügen Sie den folgenden Code hinzu, um den Datei-Upload zu verarbeiten:


// 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
  });
});
Nach dem Login kopieren
Nach dem Login kopieren
Dieser Endpunkt führt Folgendes aus:

  • Erhält einen einzelnen Datei-Upload (mit dem Feldnamen Datei).
  • Gibt die URL der hochgeladenen Datei zurück.

Schritt 5: Bereitstellen der hochgeladenen Dateien

Jetzt erstellen wir einen GET-Endpunkt, um die hochgeladenen Dateien bereitzustellen. Wenn Abfrageparameter angegeben werden (z. B. Größenänderung, Formatkonvertierung), verarbeitet der Server das Bild entsprechend.

Fügen Sie den folgenden Code hinzu, um die hochgeladenen Dateien bereitzustellen:

mkdir image-upload-server
cd image-upload-server
npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Endpunkt:

  • Ruft die Datei basierend auf dem Dateinamen aus der Datenbankzuordnung ab.
  • Verarbeitet das Bild, wenn Größenänderung, Formatkonvertierung oder Qualitätsanpassungen angegeben sind.
  • Zwischenspeichert die verarbeiteten Bilder, um die Leistung zu verbessern.

Schritt 6: Bilder mit Sharp verarbeiten

Die Sharp-Bibliothek ermöglicht es uns, verschiedene Transformationen an den Bildern durchzuführen, wie z. B. Größenänderung, Formatkonvertierung und Qualitätsanpassungen.

Fügen Sie die Funktion „processImage“ hinzu, die diese Transformationen verarbeitet:

npm install express multer sharp cors 
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Funktion:

  • Ändert die Größe des Bildes basierend auf den Parametern h (Höhe) und w (Breite).
  • Konvertiert das Bildformat basierend auf dem f-Parameter (JPEG, PNG, WebP usw.).
  • Passt die Bildqualität basierend auf dem q-Parameter an (optional).
  • Speichert das verarbeitete Bild im Transform-Image-Ordner.

Schritt 7: Starten Sie den Server

Zuletzt starten Sie den Server, indem Sie den folgenden Code hinzufügen:

mkdir original-image transform-image
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch wird der Server auf Port 3000 gestartet.


Schritt 8: Testen des Servers

1. Datei-Upload mit Postman testen

Um die Funktion zum Hochladen von Dateien mit Postman zu testen, führen Sie die folgenden Schritte aus:

1.1 Öffnen Sie Postman

Starten Sie Postman auf Ihrem Computer. Wenn Sie Postman nicht installiert haben, können Sie es hier herunterladen.

1.2 Erstellen Sie eine POST-Anfrage

  • Setzen Sie den Anfragetyp auf POST.
  • Geben Sie im Feld URL Folgendes ein: http://localhost:3000/upload.

1.3 Fügen Sie die Datei im Textkörper hinzu

  • Wählen Sie die Registerkarte Text aus.
  • Wählen Sie die Option Formulardaten.
  • Setzen Sie im Formular den Schlüssel auf Datei (dieser muss mit dem Feldnamen in Ihrer Multer-Konfiguration übereinstimmen).
  • Klicken Sie auf die Schaltfläche Dateien auswählen und wählen Sie eine Bilddatei von Ihrem Computer aus.

1.4 Senden Sie die Anfrage

  • Klicken Sie auf Senden.
  • Wenn der Upload erfolgreich war, sollten Sie eine Antwort mit der URL des hochgeladenen Bildes erhalten.

Beispielantwort:

mkdir image-upload-server
cd image-upload-server
npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

2. Bildabruf und -verarbeitung über den Browser testen

Jetzt testen wir das Abrufen des Bildes mit Transformationen mit dem Browser.

2.1 Holen Sie sich das hochgeladene Bild

Um das Bild abzurufen, öffnen Sie einfach Ihren Browser und navigieren Sie zu der URL, die Sie nach dem Hochladen der Datei erhalten haben. Wenn die Antwort-URL beispielsweise lautete:

npm install express multer sharp cors 
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Geben Sie einfach diese URL in die Adressleiste Ihres Browsers ein und drücken Sie die Eingabetaste. Das Originalbild sollte angezeigt werden.


3. Bildtransformationen mit Abfrageparametern testen

Jetzt testen wir dynamische Bildtransformationen, indem wir Abfrageparameter für Größenänderung, Formatkonvertierung und Qualitätsanpassung anhängen.

3.1 Abfrageparameter für die Transformation hinzufügen

Fügen Sie in Ihrem Browser Abfrageparameter an die Bild-URL hinzu, um Transformationen zu testen. Hier einige Beispiele:

  • Ändern Sie die Größe des Bildes auf eine Breite von 200 Pixel und eine Höhe von 300 Pixel:
mkdir original-image transform-image
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • Konvertieren Sie das Bild in das PNG-Format:
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 }));
Nach dem Login kopieren
Nach dem Login kopieren
  • Konvertieren Sie das Bild in das WebP-Format mit 90 % Qualität:
// 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 });
Nach dem Login kopieren
Nach dem Login kopieren
  • Ändern Sie die Größe des Bildes auf eine Breite von 400 Pixel und eine Höhe von 500 Pixel und konvertieren Sie es in JPEG mit 80 % Qualität:
// 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
  });
});
Nach dem Login kopieren
Nach dem Login kopieren

3.2 Erwartetes Verhalten

  • Wenn Sie mit den Abfrageparametern auf eine der URLs zugreifen, verarbeitet der Server das Bild entsprechend.
    • Wenn das Bild zuvor mit denselben Parametern verarbeitet wurde, wird die zwischengespeicherte Version bereitgestellt.
    • Wenn es noch nicht verarbeitet wurde, wird das Bild verarbeitet (Größe ändern, Format konvertieren, Qualität anpassen) und für zukünftige Anfragen im Ordner „transform-image“ gespeichert.

Der Browser zeigt das verarbeitete Bild an und Sie können bestätigen, ob die Transformation korrekt angewendet wurde.


Beispiel-Workflow

  1. Laden Sie ein Bild über Postman hoch.
  2. Rufen Sie das hochgeladene Bild im Browser über die von Postman bereitgestellte URL ab.
  3. Ändern Sie die URL im Browser, indem Sie Abfrageparameter wie ?h=300&w=200 hinzufügen, um die Größenänderung in Aktion zu sehen, oder ?f=webp&q=90 für die Formatkonvertierung.

Abschluss

Dieser Bild-Upload- und -Verarbeitungsserver bietet eine robuste Lösung für die Handhabung von Bild-Uploads, -Transformationen und -Abrufen. Mithilfe von Multer für die Dateiverwaltung und Sharp für die Bildverarbeitung werden Größenänderung, Formatkonvertierung und Qualitätsanpassungen über Abfrageparameter unterstützt. Das System speichert verarbeitete Bilder effizient zwischen, um die Leistung zu optimieren und eine schnelle und reaktionsschnelle Bildbereitstellung zu gewährleisten. Dieser Ansatz vereinfacht die Bildverwaltung für Anwendungen, die dynamische Bildtransformationen erfordern, und macht es zu einem vielseitigen Werkzeug für Entwickler.

Das obige ist der detaillierte Inhalt vonErstellen einer Express-Web-App für Datei-Uploads und dynamische Bildverarbeitung im Handumdrehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage