Nodejs 上传附件保存到文件夹
Nodejs 上传附件保存到文件夹
var fs = require(‘fs’); var upload_save = function(req, res) { var filname = req.files.fname; var client = req.user.client.client; var upload_filename = filname.path.split(’/’).pop(); var realpath = __dirname + ‘/…/…/’; newPath = fs.realpathSync(realpath); var firstpath = newPath + ‘/attachment’; var secondpath = newPath + ‘/attachment/’ + client; console.log(firstpath); //判断文件夹是否存在 if (!fs.existsSync(firstpath)) { fs.mkdirSync(firstpath); fs.mkdirSync(secondpath); } else if (!fs.existsSync(secondpath)) { fs.mkdirSync(secondpath); } var newPath = secondpath + ‘/’ + upload_filename; fs.readFile(filname.path, function(err, data) { //console.log(‘data’ + data); fs.writeFile(newPath, data, function(err) { if (err) { return res.json({ code: ‘ERR’, msg: err }); } else { Attachment.create({ file_title: filname.name, file_name: upload_filename, mime_type: filname.type, size: filname.size, store_path: newPath }, function(err, attachment) { fs.unlink(filname.path, function(err) { if (err) { console.log(err); } else { console.log(‘删除成功’); } }) if (err) { res.json({ code: ‘ERR’, msg: err }); }; if (attachment) { return res.json({ code: ‘ok’, msg: attachment.id }); } else { res.json({ code: ‘ERR’, msg: err }) } }) }; }); }); }
好的,以下是如何使用 Node.js 实现上传附件并保存到指定文件夹的详细步骤及示例代码。
标题:Node.js 上传附件保存到文件夹
内容:
为了实现上传附件并将其保存到指定文件夹的功能,我们需要使用 express
和 multer
这两个库。express
是一个流行的 Node.js Web 框架,而 multer
则是一个专门用于处理表单文件上传的中间件。
安装依赖
首先,确保你已经安装了必要的依赖包:
npm install express multer
示例代码
const express = require('express');
const multer = require('multer');
const fs = require('fs');
const path = require('path');
const app = express();
// 配置 Multer 存储引擎
const storage = multer.diskStorage({
destination: function (req, file, cb) {
const client = req.body.client; // 假设客户端信息从请求体中获取
const uploadDir = path.join(__dirname, '../uploads', client); // 设置上传目录
// 如果目录不存在,则创建
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
cb(null, uploadDir);
},
filename: function (req, file, cb) {
cb(null, file.originalname); // 使用原始文件名作为存储文件名
}
});
const upload = multer({ storage: storage });
// 路由处理上传
app.post('/upload', upload.single('fname'), (req, res) => {
try {
// 返回成功响应
res.json({
code: 'ok',
msg: '文件上传成功'
});
} catch (err) {
// 返回错误响应
res.status(500).json({
code: 'ERR',
msg: err.message
});
}
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
解释
- 引入依赖:我们引入了
express
、multer
、fs
和path
。 - 配置 Multer:我们使用
multer.diskStorage
来配置存储引擎。destination
函数用于指定文件的存储路径,并且如果该路径不存在则自动创建。 - 设置路由:我们定义了一个 POST 路由
/upload
,它接受一个名为fname
的文件字段。Multer 会自动处理文件上传并将文件保存到指定路径。 - 启动服务器:最后,我们启动服务器监听端口。
通过这种方式,你可以轻松地将上传的文件保存到指定的文件夹中。希望这个示例对你有所帮助!
可以使用fs.rename方法来移动文件,没必要读了再写的。
为了将上传的附件保存到指定文件夹中,可以使用 multer
这个流行的 Node.js 模块来处理文件上传。以下是基于您的描述进行的简化版本:
示例代码
首先,安装必要的依赖包:
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) {
const client = req.body.client; // 假设客户端信息是通过 body 传递的
const folderPath = `./uploads/${client}`;
cb(null, folderPath);
},
filename: function (req, file, cb) {
cb(null, file.originalname); // 使用原始文件名
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('fname'), (req, res) => {
try {
const client = req.body.client;
const filePath = `./uploads/${client}/${req.file.originalname}`;
console.log(`文件已保存至: ${filePath}`);
res.json({
code: 'OK',
msg: '上传成功'
});
} catch (error) {
res.json({
code: 'ERR',
msg: error.message
});
}
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
代码解析
-
multer 安装与配置:
multer
是处理表单数据(包括文件上传)的中间件。diskStorage
方法用于配置存储策略,定义了文件保存的位置和文件名。
-
文件上传路由:
/upload
路由处理单个文件上传。upload.single('fname')
指定了要处理的字段名fname
。- 文件被保存到根据
req.body.client
动态生成的文件夹中。
-
响应处理:
- 如果上传成功,返回一个成功的 JSON 响应。
- 如果发生错误,则返回带有错误信息的 JSON 响应。
这种方法避免了手动处理文件读写操作,使代码更加简洁和易于维护。