Rumah > hujung hadapan web > tutorial js > Membina Apl web Ekspres untuk Muat Naik Fail dan Pemprosesan Imej Dinamik dengan cepat

Membina Apl web Ekspres untuk Muat Naik Fail dan Pemprosesan Imej Dinamik dengan cepat

Mary-Kate Olsen
Lepaskan: 2024-11-12 01:15:02
asal
847 orang telah melayarinya

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

Panduan: Membina apl web Express untuk Muat Naik Fail dan Pemprosesan Imej Dinamik

Dalam tutorial ini, kami akan menunjukkan kepada anda cara membina pelayan dengan Express.js yang mengendalikan muat naik fail dan melaksanakan pemprosesan imej dinamik seperti saiz semula, penukaran format dan pelarasan kualiti menggunakan Sharp.

Prasyarat

Sebelum kita mula, pastikan anda telah memasang Node.js dan npm. Kami akan menggunakan perpustakaan berikut dalam tutorial ini:

  1. Express.js - untuk menyediakan pelayan.
  2. Multer - untuk mengendalikan muat naik fail.
  3. Sharp - untuk pemprosesan imej.
  4. CORS - untuk membenarkan permintaan silang asal.

Langkah 1: Menyediakan Projek

Mulakan dengan mencipta direktori baharu untuk projek anda:

mkdir image-upload-server
cd image-upload-server
npm init -y
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini akan mencipta folder projek baharu dan memulakan fail package.json.

Anda boleh memasang semua kebergantungan dengan menjalankan:

npm install express multer sharp cors 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Buat direktori yang diperlukan

Kami memerlukan dua direktori:

  • imej asal untuk menyimpan imej asal yang dimuat naik.
  • transform-image untuk menyimpan imej yang diproses.

Buat direktori ini dengan menjalankan:

mkdir original-image transform-image
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Langkah 2: Sediakan Pelayan Ekspres

Sekarang, mari sediakan pelayan asas menggunakan Express.js. Buat fail bernama index.js dalam akar projek anda dan tambahkan kod berikut untuk menyediakan pelayan:

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 }));
Salin selepas log masuk
Salin selepas log masuk

Persediaan asas ini termasuk:

  • CORS untuk membenarkan permintaan silang asal.
  • express.json() dan express.urlencoded() untuk menghuraikan data permintaan masuk.

Langkah 3: Konfigurasikan Multer untuk Muat Naik Fail

Kami akan menggunakan Multer untuk mengendalikan muat naik fail. Multer membenarkan kami menyimpan fail yang dimuat naik dalam direktori tertentu.

Tambah kod berikut untuk mengkonfigurasi Multer:

// 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 });
Salin selepas log masuk
Salin selepas log masuk

Persediaan ini memastikan bahawa:

  • Fail yang dimuat naik disimpan dalam folder imej asal.
  • Setiap fail mendapat nama unik berdasarkan cap masa semasa dan nombor rawak.

Langkah 4: Buat Titik Akhir Muat Naik Fail

Seterusnya, buat titik akhir POST untuk muat naik fail. Pengguna akan menghantar fail ke pelayan dan pelayan akan menyimpan fail dalam direktori imej asal.

Tambah kod berikut untuk mengendalikan muat naik fail:

// 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
  });
});
Salin selepas log masuk
Salin selepas log masuk

Titik akhir ini melakukan perkara berikut:

  • Menerima muat naik fail tunggal (dengan fail nama medan).
  • Mengembalikan URL fail yang dimuat naik.

Langkah 5: Layan Fail yang Dimuat Naik

Sekarang, mari buat titik akhir DAPATKAN untuk menyampaikan fail yang dimuat naik. Jika sebarang parameter pertanyaan disediakan (contohnya, mengubah saiz, penukaran format), pelayan akan memproses imej tersebut dengan sewajarnya.

Tambah kod berikut untuk menyampaikan fail yang dimuat naik:

mkdir image-upload-server
cd image-upload-server
npm init -y
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Titik akhir ini:

  • Mengambil semula fail daripada peta db berdasarkan nama fail.
  • Memproses imej jika saiz semula, penukaran format atau pelarasan kualiti ditentukan.
  • Menyimpan imej yang diproses untuk meningkatkan prestasi.

Langkah 6: Proses Imej dengan Sharp

Pustaka Sharp akan membolehkan kami melakukan pelbagai transformasi pada imej, seperti saiz semula, penukaran format dan pelarasan kualiti.

Tambahkan fungsi processImage yang mengendalikan transformasi ini:

npm install express multer sharp cors 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Fungsi ini:

  • Mengubah saiz imej berdasarkan parameter h (tinggi) dan w (lebar).
  • Menukar format imej berdasarkan parameter f (JPEG, PNG, WebP, dll.).
  • Laraskan kualiti imej berdasarkan parameter q (pilihan).
  • Menyimpan imej yang diproses dalam folder imej-transformasi.

Langkah 7: Mulakan Pelayan

Akhir sekali, mulakan pelayan dengan menambah kod berikut:

mkdir original-image transform-image
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini akan memulakan pelayan pada port 3000.


Langkah 8: Menguji Pelayan

1. Menguji Muat Naik Fail dengan Posmen

Untuk menguji kefungsian muat naik fail menggunakan Posmen, ikut langkah berikut:

1.1 Posmen Terbuka

Lancarkan Posmen pada komputer anda. Jika anda belum memasang Posmen, anda boleh memuat turunnya di sini.

1.2 Buat Permintaan POST

  • Tetapkan jenis permintaan kepada POST.
  • Dalam medan URL, masukkan: http://localhost:3000/upload.

1.3 Tambah Fail dalam Badan

  • Pilih tab Badan.
  • Pilih pilihan form-data.
  • Dalam borang, tetapkan kunci kepada fail (ini mesti sepadan dengan nama medan dalam konfigurasi multer anda).
  • Klik butang Pilih Fail dan pilih fail imej daripada komputer anda.

1.4 Hantar Permintaan

  • Klik Hantar.
  • Jika muat naik berjaya, anda akan menerima balasan dengan URL imej yang dimuat naik.

Contoh Respons:

mkdir image-upload-server
cd image-upload-server
npm init -y
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

2. Menguji Pengambilan dan Pemprosesan Imej melalui Penyemak Imbas

Sekarang, mari kita uji mendapatkan semula imej dengan transformasi menggunakan Pelayar.

2.1 Dapatkan Imej yang Dimuat Naik

Untuk mendapatkan semula imej, cuma buka penyemak imbas anda dan navigasi ke URL yang anda terima selepas memuat naik fail. Contohnya, jika URL respons ialah:

npm install express multer sharp cors 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Hanya taip URL ini dalam bar alamat penyemak imbas anda dan tekan Enter. Anda sepatutnya melihat imej asal dipaparkan.


3. Menguji Transformasi Imej dengan Parameter Pertanyaan

Sekarang, mari kita uji transformasi imej dinamik dengan menambahkan parameter pertanyaan untuk mengubah saiz, penukaran format dan pelarasan kualiti.

3.1 Tambah Parameter Pertanyaan untuk Transformasi

Dalam penyemak imbas anda, tambahkan parameter pertanyaan pada URL imej untuk menguji transformasi. Berikut ialah beberapa contoh:

  • Ubah saiz imej kepada lebar 200px dan tinggi 300px:
mkdir original-image transform-image
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
  • Tukar imej kepada format PNG:
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 }));
Salin selepas log masuk
Salin selepas log masuk
  • Tukar imej kepada format WebP dengan kualiti 90%:
// 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 });
Salin selepas log masuk
Salin selepas log masuk
  • Ubah saiz imej kepada lebar 400px, tinggi 500px dan tukar kepada JPEG dengan kualiti 80%:
// 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
  });
});
Salin selepas log masuk
Salin selepas log masuk

3.2 Tingkah Laku Yang Dijangka

  • Apabila anda mengakses mana-mana URL dengan parameter pertanyaan, pelayan akan memproses imej tersebut dengan sewajarnya.
    • Jika imej telah diproses sebelum ini dengan parameter yang sama, ia akan memaparkan versi cache.
    • Jika ia belum diproses lagi, ia akan memproses imej (mengubah saiz, menukar format, melaraskan kualiti) dan menyimpannya dalam folder imej-transformasi untuk permintaan akan datang.

Pelayar akan memaparkan imej yang diproses dan anda boleh mengesahkan sama ada transformasi telah digunakan dengan betul.


Contoh Aliran Kerja

  1. Muat naik imej melalui Posmen.
  2. Dapatkan semula imej yang dimuat naik dalam penyemak imbas menggunakan URL yang disediakan oleh Posmen.
  3. Ubah suai URL dalam penyemak imbas dengan menambahkan parameter pertanyaan seperti ?h=300&w=200 untuk melihat saiz semula dalam tindakan atau ?f=webp&q=90 untuk penukaran format.

Kesimpulan

Pelayan muat naik dan pemprosesan imej ini menyediakan penyelesaian yang mantap untuk mengendalikan muat naik imej, transformasi dan pengambilan semula. Menggunakan Multer untuk pengendalian fail dan Sharp untuk pemprosesan imej, ia menyokong saiz semula, penukaran format dan pelarasan kualiti melalui parameter pertanyaan. Sistem ini dengan cekap menyimpan imej yang diproses untuk mengoptimumkan prestasi, memastikan penghantaran imej yang cepat dan responsif. Pendekatan ini memudahkan pengurusan imej untuk aplikasi yang memerlukan transformasi imej dinamik, menjadikannya alat serba boleh untuk pembangun.

Atas ialah kandungan terperinci Membina Apl web Ekspres untuk Muat Naik Fail dan Pemprosesan Imej Dinamik dengan cepat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan