美文网首页技术干货我爱编程
Node中间件multer文件上传实践

Node中间件multer文件上传实践

作者: RtyXmd | 来源:发表于2018-05-24 18:28 被阅读27次
    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

    搞定收工~
    上传成功

    相关文章

      网友评论

        本文标题:Node中间件multer文件上传实践

        本文链接:https://www.haomeiwen.com/subject/fensjftx.html