Node中间件multer文件上传实践

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.遇到的问题及解决方案

照上面写的话在本地跑是没问题的


Node中间件multer文件上传实践_第1张图片
本地返回

因为是本地起的服务,文件返回的路径也是相对于windows的磁盘目录返回的路径

注意:当部署到服务器时,文件存储路径就出问题了
Node中间件multer文件上传实践_第2张图片
服务器环境

在服务器上返回的是服务器的文件目录
这个路径是对的没错,但是这样返回根本读不到这个图片

自行拼接文件访问目录

文件的存储位置是和node服务同级的,此项目服务器为阿里云centos系统,去到阿里云后台添加安全组


阿里云安全组

配置nginx

server {
        listen 阿里云安全组端口;

        server_name **********;
        
        location / {
            root /usr/share/nginx/html/upload_files;
        }
    }

切记重启nginx 重启node

搞定收工~
上传成功

你可能感兴趣的:(Node中间件multer文件上传实践)