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 }) } }) }; }); }); }


3 回复

好的,以下是如何使用 Node.js 实现上传附件并保存到指定文件夹的详细步骤及示例代码。

标题:Node.js 上传附件保存到文件夹

内容:

为了实现上传附件并将其保存到指定文件夹的功能,我们需要使用 expressmulter 这两个库。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}`);
});

解释

  1. 引入依赖:我们引入了 expressmulterfspath
  2. 配置 Multer:我们使用 multer.diskStorage 来配置存储引擎。destination 函数用于指定文件的存储路径,并且如果该路径不存在则自动创建。
  3. 设置路由:我们定义了一个 POST 路由 /upload,它接受一个名为 fname 的文件字段。Multer 会自动处理文件上传并将文件保存到指定路径。
  4. 启动服务器:最后,我们启动服务器监听端口。

通过这种方式,你可以轻松地将上传的文件保存到指定的文件夹中。希望这个示例对你有所帮助!


可以使用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');
});

代码解析

  1. multer 安装与配置:

    • multer 是处理表单数据(包括文件上传)的中间件。
    • diskStorage 方法用于配置存储策略,定义了文件保存的位置和文件名。
  2. 文件上传路由:

    • /upload 路由处理单个文件上传。
    • upload.single('fname') 指定了要处理的字段名 fname
    • 文件被保存到根据 req.body.client 动态生成的文件夹中。
  3. 响应处理:

    • 如果上传成功,返回一个成功的 JSON 响应。
    • 如果发生错误,则返回带有错误信息的 JSON 响应。

这种方法避免了手动处理文件读写操作,使代码更加简洁和易于维护。

回到顶部