基于nodejs服务端的上传文件操作

1、首先安装multer,命令:

npm install express multer

2、在路由文件(此处操作以已经搭建好的express项目为例,详见“Express脚手架generator快速搭建项目”)中引入multer模块,并设置上传路径:

var multer = require('multer');
var upload = multer({dest:'upload/'})

这里注意了:这样设置,如果没有upload文件夹,则会自动创建。为什么要注意这一点,下面会说到。

3、上传接口

router.post('/upload', upload.single('myfile'), function(req, res, next){
    //console.log(req);
  res.send({ret_code: '0'});
});

4、html文件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form action="/upload" method="post" enctype="multipart/form-data">
            <input type="file" name="myfile" id="myfile" value="" />
            <input type="submit" value="上传"/>
        </form>
    </body>
</html>

此时就完成了上传文件的基本操作。
上传测试:

 

 

 


 
发现图片没有后缀名

此时发现文件(我用的是jpg图片)没有后缀名,这特么不是操蛋么,于是只能找度娘嘿嘿嘿了一下。
解决方法:
在multer对象下设置diskStorage
把步骤2的

var upload = multer({dest:'upload/'});

替换为:

 var storage = multer.diskStorage({
     //设置上传后文件路径,uploads文件夹需要手动创建!!!
        destination: function (req, file, cb) {
            cb(null, './public/uploads')
       }, 
     //给上传文件重命名,获取添加后缀名
      filename: function (req, file, cb) {
          var fileFormat = (file.originalname).split(".");
          cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]);
      }
 });  
     //添加配置文件到muler对象。
     var upload = multer({
          storage: storage
    });

这样设置uploads文件夹作为上传路径时,需要手动在public内创建uploads。若没有uploads文件夹,浏览器报错" Not found No such file or directory, open ...."
这里有人说没有uploads也能自动创建(我的反正是报错了)

修改完成之后,测试上传:


 

 

 

上传成功

 

posted @ 2021-07-29 00:46  张达嘛  阅读(592)  评论(0编辑  收藏  举报