Meteor.js服务端图片上传问题:如何获取上传文件名?
解决Meteor路由中无法获取上传文件名的问题
你遇到的核心问题是没有解析multipart/form-data类型的请求——Meteor默认不会自动处理这种文件上传格式的请求,所以this.request.files才会是空的。下面是具体的解决步骤:
1. 安装文件上传解析包
我们可以用multer这个常用的Node.js中间件来处理文件上传,先在你的Meteor项目中安装它:
meteor npm install multer --save
2. 配置路由并应用解析中间件
修改你的server.js代码,引入multer并配置存储方式,再把中间件绑定到路由上:
// 引入multer包 import multer from 'multer'; // 配置内存存储(适合临时获取文件信息,也可以换成磁盘存储持久化文件) const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); // 修改路由,添加multer中间件 Router.route('/api/uploadimage/', { where: 'server' }) // 这里的'image'对应你Postman请求里的form-data键名 .post(upload.single('image'), function() { // 现在可以正常获取文件名了 const fileName = this.request.file.originalname; console.log('上传的文件名:', fileName); // 可选:返回响应给客户端 this.response.writeHead(200, { 'Content-Type': 'application/json' }); this.response.end(JSON.stringify({ success: true, filename: fileName })); });
3. 匹配Postman的请求设置
确保你的Postman请求满足以下要求:
- 请求方法为POST
- Body类型选择
form-data - 添加一个键,名称为
image(和代码里upload.single('image')的参数一致),类型选择File,然后选择本地文件上传
如果是多文件上传,只需要把upload.single('image')换成upload.array('images', 5)(第二个参数是最大上传数量),然后通过this.request.files获取文件数组,每个元素的originalname就是对应文件名。
内容的提问来源于stack exchange,提问作者parv
相关产品推荐
相关产品推荐

