nodejs 实现文件上传

2018-05-25  本文已影响0人  super静_jingjing

文件上传需要解析文件,之前我们解析数据使用body-parser,解析文件可以用multer。
body-parser: 解析post数据 form-enctype- application/x-www-form-urlencoded 默认

server.use(bodyParse.urlencode());

multer: 解析post文件 form-enctype- multipart/form-data

//dest的值用来存放上传的文件保存的路径
var obj=multer({dest: 'upload/'});

完整用法:

var obj=multer({dest: 'upload/'});
server.use(obj.any());
server.use(function (req, res){
    req.files[0].originalname
    req.files[0].path
});

但是这样拿到的数据req.files[0].path,是没有文件扩展名的;所以需要将其添加扩展名。
原理就是:拿到源文件的扩展名,使用file的rename方法,将其崇明名成带扩展名的文件。完整代码如下:
html:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
      <form class="" action="http://localhost:5555/" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="fil" value=""><br>
        <input type="submit" name="" value="上传">
      </form>
  </body>
</html>

js:

const express = require("express");
const bodyParser = require("body-parser");
const multer = require("multer");
const fs = require("fs");
const pathLib = require("path");
var server = express();
// const path = require("path");
//指定上传文件保存的路径
var objMulter = multer({dest:"."});
server.use(objMulter.any());
server.post('/',function(req,res){
  console.log(req.files);
  var fi = req.files[0];
  var originalname = fi.originalname;
   var newName = fi.path+pathLib.parse(originalname).ext;
   fs.rename(fi.path,newName,function(err){
     if(err){
       res.send("上传失败");
     }else{
        res.send("上传成功");
     }
   });
});
server.listen(5555);

启动服务:node server.js


image.png

浏览器运行html文件,点击文件上传:


image.png

点击上传按钮:
html:



cmd:
image.png

文件:


image.png
上一篇下一篇

猜你喜欢

热点阅读