Bina API Muat naik gambar yang kuat: Gunakan node.js, multer, dan postgresql
Artikel ini akan membimbing anda cara menggunakan Node.js, Multer, dan PostgreSQL untuk membina API yang mudah dan mudah untuk mencapai fungsi memuat naik gambar tunggal dan berganda. Anda boleh dengan mudah melengkapkan muat naik gambar dan penyimpanan pangkalan data tanpa konfigurasi kompleks.
Prasyarat:
<code class="language-bash">mkdir imageUpload cd imageUpload npm init -y</code>
<code class="language-bash">npm install express multer body-parser pg</code>
<code>imageUpload/ ├── index.js ├── images/ ├── db/ │ └── db.js └── routes/ └── image_routes.js └── controllers/ └── upload.js</code>
<code class="language-sql">CREATE DATABASE uploader; CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, icon VARCHAR NOT NULL);</code>
Sambungan pangkalan data (db.js):
<code class="language-javascript">const { Client } = require('pg'); const client = new Client({ user: 'postgres', host: 'localhost', database: 'uploader', password: 'YOUR_PASSWORD', // 请替换为您的数据库密码 port: 5432, }); client.connect().then(() => console.log("Connected to DB")).catch(err => console.error("数据库连接失败:", err.message)); module.exports = client;</code>
definisi penghalaan (image_routes.js):
<code class="language-javascript">const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const port = process.env.PORT || 4000; app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use('/images', express.static('images')); // 设置静态文件目录 require('./routes/image_routes')(app); app.listen(port, () => { console.log(`服务器运行在端口 ${port}`); });</code>
pengawal muat naik (upload.js):
<code class="language-javascript">const express = require('express'); const uploadController = require('../controllers/upload'); module.exports = (app) => { app.post('/upload/single', uploadController.upload.single('icon'), uploadController.uploadSingleImage); app.post('/upload/multiple', uploadController.upload.array('icon', 12), uploadController.uploadMultipleImage); };</code>
<:> ujian:
Gunakan Postman untuk menghantar permintaan pos ke<code class="language-javascript">const multer = require('multer'); const path = require('path'); const client = require('../db/db'); const storage = multer.diskStorage({ destination: (req, file, cb) => cb(null, './images'), filename: (req, file, cb) => cb(null, `image-${Date.now()}${path.extname(file.originalname)}`), }); const fileFilter = (req, file, cb) => { if (!file.originalname.match(/\.(jpg|jpeg|png)$/i)) { return cb(new Error('请上传 JPG, JPEG 或 PNG 格式的图片'), false); } cb(null, true); }; exports.upload = multer({ storage, fileFilter }); exports.uploadSingleImage = async (req, res) => { try { await client.query(`INSERT INTO users (name, icon) VALUES ('${req.body.name}', '${req.file.filename}')`); res.json({ statusCode: 200, status: true, message: '图片上传成功' }); } catch (error) { console.error("图片上传失败:", error); res.status(500).json({ statusCode: 500, status: false, message: '图片上传失败' }); } }; exports.uploadMultipleImage = async (req, res) => { try { for (const file of req.files) { await client.query(`INSERT INTO users (name, icon) VALUES ('${req.body.name}', '${file.filename}')`); } res.json({ statusCode: 200, status: true, message: '所有图片上传成功' }); } catch (error) { console.error("图片上传失败:", error); res.status(500).json({ statusCode: 500, status: false, message: '图片上传失败' }); } }; </code>
Sila ambil perhatian bahawa
dalam kod di atas perlu diganti dengan kata laluan pangkalan data PostgreSQL anda. Rawatan ralat telah dipertingkatkan, memberikan maklumat ralat yang lebih jelas. Pengesahan format gambar juga lebih ketat. Akhirnya, ingatlah untuk menetapkan folder gambar untuk diakses. /upload/single
/upload/multiple
Respons yang disemak ini menyediakan penyelesaian yang lebih mantap dan selamat, termasuk pengendalian ralat dan kejelasan yang lebih baik
Atas ialah kandungan terperinci Bagaimana untuk membina API REST NodeJS Express untuk Muat Naik Imej menggunakan Multer(PostgreSQL). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!