实现图片上传接口
在 Web 开发中,图片上传是一个常见且重要的功能。无论是用户头像上传、文章配图还是商品图片展示,都离不开图片上传接口的支持。本文将详细介绍如何使用 Node.js 和 Express 框架实现一个简单的图片上传接口,包括前端表单提交和后端文件处理。
步骤1:创建项目并安装依赖
首先,我们需要创建一个新的 Node.js 项目,并安装所需的依赖。在命令行中执行以下命令:
mkdir image-upload-api
cd image-upload-api
npm init -y
npm install express multer
这里我们安装了 express
作为 Web 框架,multer
作为中间件处理文件上传。
步骤2:编写后端代码
接下来,我们创建一个名为 app.js
的文件,用于编写后端代码。首先引入所需的模块:
const express = require('express');
const multer = require('multer');
然后,配置 multer
中间件,设置上传文件的存储路径和文件名:
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + '-' + file.originalname);
},
});
const upload = multer({ storage: storage });
接着,创建一个简单的 Express 应用,并定义一个 POST 路由用于处理图片上传请求:
const app = express();
app.post('/upload', upload.single('image'), (req, res) => {
res.status(200).json({ message: '图片上传成功', url: req.file.path });
});
最后,启动服务器监听端口:
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
至此,后端代码编写完成。
步骤3:创建前端表单
为了测试我们的图片上传接口,我们需要创建一个简单的前端表单。在项目根目录下创建一个名为 index.html
的文件,编写如下 HTML 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Upload</title>
</head>
<body>
<h1>图片上传</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="image" required>
<button type="submit">上传图片</button>
</form>
</body>
</html>
步骤4:测试图片上传接口
现在我们可以启动后端服务器,并在浏览器中打开 index.html
页面进行测试。在命令行中执行以下命令启动服务器:
node app.js
然后在浏览器中访问 http://localhost:3000
,选择一个图片文件并点击上传按钮。如果一切正常,你应该会看到服务器返回的消息 “图片上传成功”,并且可以通过提供的 URL 访问刚刚上传的图片。
完整的实例代码
以下是一个完整的实例,展示了如何实现一个简单的图片上传接口:
// app.js
const express = require('express');
const multer = require('multer');
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + '-' + file.originalname);
},
});
const upload = multer({ storage: storage });
const app = express();
app.post('/upload', upload.single('image'), (req, res) => {
res.status(200).json({ message: '图片上传成功', url: req.file.path });
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Upload</title>
</head>
<body>
<h1>图片上传</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="image" required>
<button type="submit">上传图片</button>
</form>
</body>
</html>