上传图片以及文件的方法--multer

multer


multer

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。
注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。
标签内设置属性 enctype=multipart/form-data是必须的,这样才可以上传文件,方式为post。

  <form action="http://localhost:8080/" method="post" enctype="multipart/form-data">
      文件:<input type="file" name="f1" />
      <input type="submit" value="上传">
    </form>

通常我们在后台接收文件时喜欢用bodyparser解决,可是bodyparser只能解决文本,我们用介个处理的话只能得到文件的名字,multer则可以帮助我们上传正儿八经的文件!!!

const express=require('express');
const multer=require('multer');
var objMulter=multer();
var server=express();
server.use(objMulter.any());
server.post('/', function (req, res){
  console.log(req.files);
});
server.listen(8080);
/*[ { fieldname: 'f1',
    originalname: '111.jpg',
    encoding: '7bit',
    mimetype: 'image/jpeg',
    buffer:
     <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 60 00 60 00 00 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f ... >,
    size: 798 } ]*/ 
    //上传一张图片得到的数据

可以将buffer数据利用readfile保存,但是这样buffer就占用了内存,所以我们应该想想别的办法,直接将文件写入磁盘里。
var objMulter=multer({dest: './www/upload/'});multer中可以添加dest指定路径

//得到的数据的格式悄悄地发生了变化
[ { fieldname: 'f1',
    originalname: '111.jpg',
    encoding: '7bit',
    mimetype: 'image/jpeg',
    destination: './www/upload/',
    filename: '8b1444c78da2394b89e8f90ef507ff7a',
    path: 'www\\upload\\8b1444c78da2394b89e8f90ef507ff7a',
    size: 798 } ]

可是即便如此我们得到的还是不是文件本身,而是一堆乱码,因为我们给他假的扩展名不对。
借用中间件给文件重命名
更改文件名

const fs=require('fs');

fs.rename('a.txt', 'b.txt', function (err){
  console.log(err);
});

获取文件扩展名

const path=require('path');

var str='c:\\wamp\\www\\a.html';

var obj=path.parse(str);

//base      文件名部分
//ext       扩展名
//dir       路径
//name      文件名部分
console.log(obj);

完整版代码

const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
const fs=require('fs');
const pathLib=require('path');

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

var server=express();

//错误
//server.use(bodyParser.urlencoded({extended: false}));
server.use(objMulter.any());

server.post('/', function (req, res){
  //新文件名
  //'./www/upload/dfb33662df86c75cf4ea8197f9d419f9' + '.png'
  var newName=req.files[0].path+pathLib.parse(req.files[0].originalname).ext;

  fs.rename(req.files[0].path, newName, function (err){
    if(err)
      res.send('上传失败');
    else
      res.send('成功');
  });

  //1.获取原始文件扩展名
  //2.重命名临时文件
});

server.listen(8080);

大功告成la!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值