1.首先安装multer
cnpm install --save multer
2.引入
我是在路由中用到的 所以在route/index.js中引入
var express = require('express')
var multer = require('multer')
var path = require('path'); 引入path用来访问服务器目录
3.文件存储配置
var storage = multer.diskStorage({
destination: function (req, file, cb) {
//文件存储目录
cb(null, path.join(__dirname, '../../upload_files'))
//我这里的路径是与node项目同级而不是在node项目中
//这样写当每次更新服务器代码的时候不会导致静态资源的冲突
},
filename: function (req, file, cb) {
//文件名 multer不会存储文件后缀 需自己添加
var fileFormat = (file.originalname).split(".");
cb(null, 'rty_blog' + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1])
}
})
var upload = multer({
storage: storage
})
4.基本用法
//单文件上传
router.post('/blogUpload', upload.single('avatar'), function (req, res, next) {
console.log(req.file)
console.log(req.file.filename)
})
5.upload参数(用于单个或多个文件上传)
single(fieldname)
单文件上传,接收一个以fieldname命名的文件,文件信息保存在req.file
array(fieldname,[maxCount])
多文件上传,接收一个以fieldname命名的数组。配置maxCount来限制最大上传数量。
文件信息保存在req.files
fields(fields)
接收指定fields的混合文件。文件信息保存在req.files
req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组
6.遇到的问题及解决方案
照上面写的话在本地跑是没问题的
本地返回
因为是本地起的服务,文件返回的路径也是相对于windows的磁盘目录返回的路径
注意:当部署到服务器时,文件存储路径就出问题了
服务器环境在服务器上返回的是服务器的文件目录
这个路径是对的没错,但是这样返回根本读不到这个图片
自行拼接文件访问目录
文件的存储位置是和node服务同级的,此项目服务器为阿里云centos系统,去到阿里云后台添加安全组
阿里云安全组
配置nginx
server {
listen 阿里云安全组端口;
server_name **********;
location / {
root /usr/share/nginx/html/upload_files;
}
}
切记重启nginx 重启node
网友评论