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

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

本地返回

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

注意:当部署到服务器时,文件存储路径就出问题了

服务器环境

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

自行拼接文件访问目录

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

阿里云安全组

配置nginx

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

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

切记重启nginx 重启node

搞定收工~

上传成功

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据分析

Windows PowerShell 学习之——Cmdlet处理生命周期

这一次介绍一下Cmdlet处理过程的生命周期 1. 概述 下图展示Windows PowerShell怎样处理一个管道请求指令。 这个流程包括: 指令参数(pa...

2896
来自专栏Python小屋

Python操作Excel文件中多WorkSheet模拟数据库内连接查询

严格意义上来讲,是可以把Excel文件看作数据库的,C#通过OLEDB.net就可以使用SQL语句操作Excel文件中的数据。 本文代码使用Python扩展库o...

3414
来自专栏Java架构

Java 程序员须知道和掌握的 Linux 命令

1793
来自专栏章鱼的慢慢技术路

Unity Package Manager Error的解决方案

3795
来自专栏蓝天

快速上手,协程剖析

协程也叫微线程,英文名称为coroutine。一个进程可以有多个线程,一个线程可以有多个协程,这是协程和线程间的关系。不同的是,线程由系统调度,但协程需要...

981
来自专栏猿说1024

JDK 安装

1916
来自专栏前端大白专栏

关于roadhogrc 新版本问题

1375
来自专栏蓝天

通用的进程监控重拉起bash脚本process_monitor.sh

701
来自专栏梦魇小栈

crontab 踩坑之绝对路径

由于放假后网络原因不方便使用电脑,需要创建一个 crontab 定时任务,用来在每天固定时间执行一个 Shell 脚本

2303
来自专栏别先生

'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

1、C:\Users\Aiyufei>mysql -h 127.0.0.1 -u root 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。...

3343

扫码关注云+社区