Nodejs 上传文件 放在指定目录

Nodejs 上传文件 放在指定目录

用什么方法放在指定目录呢?

比如 var target_path = ‘./datas/images/’ + req.files.thumbnail.name;

为什么一直是临时目录 { thumbnail: { fieldName: ‘thumbnail’, originalFilename: ‘Box2dWeb-2.1a.3.zip’, path: ‘/var/folders/h6/84pndq_d663bq3fsdrf4bsk80000gn/T/8676-3pi5it.zip’, headers: { ‘content-disposition’: ‘form-data; name=“thumbnail”; filename=“Box2dWeb-2.1a.3.zip”’, ‘content-type’: ‘application/zip’ }, ws: { _writableState: [Object], writable: true, domain: null, _events: [Object], _maxListeners: 10, path: ‘/var/folders/h6/84pndq_d663bq3fsdrf4bsk80000gn/T/8676-3pi5it.zip’, fd: null, flags: ‘w’, mode: 438, start: undefined, pos: undefined, bytesWritten: 106341, closed: true, open: [Function], _write: [Function], destroy: [Function], close: [Function], destroySoon: [Function], pipe: [Function], write: [Function], end: [Function], setMaxListeners: [Function], emit: [Function], addListener: [Function], on: [Function], once: [Function], removeListener: [Function], removeAllListeners: [Function], listeners: [Function] }, size: 106341, name: ‘Box2dWeb-2.1a.3.zip’, type: ‘application/zip’ } }


2 回复

Node.js 上传文件并保存到指定目录

在处理文件上传时,经常需要将上传的文件从临时位置移动到一个指定的目录。使用 multer 这样的中间件可以简化这个过程。以下是一个简单的示例,展示如何实现这一功能。

安装依赖

首先确保你已经安装了 expressmulter

npm install express multer

示例代码

const express = require('express');
const multer = require('multer');

// 创建一个 Express 应用实例
const app = express();

// 设置 Multer 存储策略
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        // 指定目标目录
        cb(null, './datas/images/');
    },
    filename: function (req, file, cb) {
        // 使用文件原始名称作为文件名
        cb(null, file.originalname);
    }
});

// 创建 Multer 实例
const upload = multer({ storage: storage });

app.post('/upload', upload.single('thumbnail'), (req, res) => {
    // 文件已上传并保存到指定目录
    res.send('File uploaded successfully!');
});

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. Express 应用:创建一个基本的 Express 应用来处理 HTTP 请求。
  2. Multer 配置
    • destination:定义文件上传后的存储目录。
    • filename:定义文件保存时的名称。这里我们直接使用原始文件名。
  3. 路由处理:设置 /upload 路由来处理文件上传请求,并使用 upload.single('thumbnail') 来处理单个文件。
  4. 启动服务器:监听端口 3000,等待文件上传请求。

通过上述配置,上传的文件将被自动保存到 ./datas/images/ 目录下,并且文件名保持不变。

注意事项

  • 确保目标目录存在,否则上传可能会失败。
  • 在生产环境中,建议对上传的文件进行安全检查,避免潜在的安全问题(如恶意文件)。
  • 可以根据需要调整 filename 函数,例如添加时间戳或哈希值来避免文件重名问题。

通过这种方式,你可以轻松地将上传的文件保存到指定目录中。


为了将上传的文件保存到指定目录中,你需要使用一个文件上传中间件,例如 multer。Multer 是一个专门为 Node.js 设计的用于处理 multipart/form-data 的中间件,主要用于文件上传。

以下是使用 Multer 将文件保存到指定目录的示例代码:

安装 Multer

首先,安装 Multer:

npm install multer --save

设置 Multer

接下来,创建一个 Multer 实例,并配置其存储设置:

const express = require('express');
const multer = require('multer');

const app = express();

// 设置 Multer 存储
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './datas/images/'); // 指定目标目录
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname); // 使用原始文件名作为新文件名
  }
});

const upload = multer({ storage: storage });

// 创建一个处理文件上传的路由
app.post('/upload', upload.single('thumbnail'), (req, res) => {
  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server started on port 3000');
});

说明

  1. destination: 这个函数决定了文件应该被保存到哪个目录。在这个例子中,我们将其设置为 './datas/images/'
  2. filename: 这个函数决定了文件上传后的文件名。在这个例子中,我们使用了文件的原始名称。你可以根据需要修改这个逻辑,例如添加时间戳或重命名文件。

测试

运行服务器后,你可以通过发送一个带有文件的 POST 请求来测试这个设置。例如,使用 Postman 或者任何 HTTP 客户端:

curl -X POST -F "thumbnail=@/path/to/your/file.zip" http://localhost:3000/upload

这样,上传的文件就会被保存到指定的目录中。

回到顶部