Nodejs 文件上传问题
Nodejs 文件上传问题
express有个multer,文件上传非常容易,就是我想用username这个表单填的数据作为这个上传图片的文件名但是 API里 fieldname 指的是下面的那个name=‘photo‘吧,能把username得到的作为photo的文件名吗? <form method=‘post’ action=’/upload’ enctype=‘multipart/form-data’ > <input type=“file” name=‘photo’/><br> <input type=“text” name=‘username’/><br> <input type=“submit” /> </form>
express有个multer,文件上传非常容易,就是我想用username这个表单填的数据作为这个上传图片的文件名但是 API里 fieldname 指的是下面的那个name=‘photo‘吧,能把username得到的作为photo的文件名吗? <form method=‘post’ action=’/upload’ enctype=‘multipart/form-data’ > <input type=“file” name=‘photo’/><br> <input type=“text” name=‘username’/><br> <input type=“submit” /> </form>
fieldname - Field name specified in the form
老问题还没解决,顶一顶
1、可以在上传完了fs重命名一下。 2、个人觉得可以用js监听username input的输入,同步到file input的name属性中去- -
当然可以!在使用 Multer 进行文件上传时,你可以通过自定义 Multer 的存储配置来实现将 username
表单数据作为上传图片的文件名。以下是一个完整的示例,包括前端 HTML 和后端 Node.js 代码。
前端 HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="photo"/><br>
<input type="text" name="username"/><br>
<input type="submit" />
</form>
</body>
</html>
后端 Node.js 代码
首先确保你已经安装了 Express 和 Multer:
npm install express multer
然后创建一个简单的 Express 应用来处理文件上传:
const express = require('express');
const multer = require('multer');
const app = express();
// 配置 Multer 存储选项
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/') // 指定保存文件的目录
},
filename: function (req, file, cb) {
// 使用 username 作为文件名
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
cb(null, req.body.username + '-' + uniqueSuffix + '.' + file.originalname.split('.').pop());
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('photo'), (req, res) => {
if (!req.file) {
return res.status(400).send('No file uploaded.');
}
res.send(`File uploaded successfully as ${req.file.filename}`);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
-
Multer 配置:
destination
函数用于指定文件保存的位置。filename
函数用于生成文件名。这里我们使用req.body.username
作为文件名的一部分,并添加时间戳和随机数以确保文件名唯一。
-
路由处理:
/upload
路由使用upload.single('photo')
中间件来处理单个文件上传。- 在回调函数中,你可以访问上传的文件信息(如
req.file
),并返回成功响应。
这样,当你提交表单时,username
输入框中的值会被用作文件名的一部分,确保每个上传的文件都有唯一的名称。
要在使用 Multer 进行文件上传时,将表单中的 username
字段值用作上传文件的名称,你需要自定义文件命名逻辑。Multer 提供了这样一个功能,允许你在处理文件上传时指定一个函数来生成文件名。
以下是如何实现这一点的示例:
-
首先确保你已经安装了 Express 和 Multer:
npm install express multer
-
创建你的 Node.js 应用程序,并设置 Multer 以使用自定义文件名:
const express = require('express');
const multer = require('multer');
const app = express();
// 设置 Multer 存储配置
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/') // 保存文件的目标目录
},
filename: function (req, file, cb) {
// 获取 username 的值并作为文件名
const uniqueSuffix = Date.now() + '-' + req.body.username;
cb(null, file.fieldname + '-' + uniqueSuffix + '.' + file.originalname.split('.').pop());
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('photo'), (req, res) => {
// 响应请求,告诉用户上传成功
res.send('File uploaded successfully!');
});
app.listen(3000, () => console.log('Server started on port 3000'));
解释:
-
destination: 设置文件上传后的存储路径。
-
filename: 这个函数用于生成文件名。在这个例子中,我们结合了
file.fieldname
(这里是photo
)以及req.body.username
(从表单提交的数据中获取的用户名)作为文件名的一部分,同时添加了一个时间戳来保证文件名的独特性。 -
upload.single(‘photo’): 这表示 Multer 将会处理表单中
name="photo"
的文件字段。
通过这种方式,你可以根据用户提交的 username
来命名上传的文件,从而达到题目中的需求。