node-文件上传

文件上传,算是网页中屡见不鲜的功能。搞web开发的程序员没有不知道的。尽管如此,我也得拿出来说说,作为自己学习成果。
事物都是一个不断更新迭代的过程。目前,所做的仅仅在跟随巨人脚步。学习记录,但愿有助新人。:)

直接开干

用过node写程序的人,都知道node模块话开发,有时候动不动就是十来个依赖包导入。比如这个node程序,要用到的模块就有12个。当然文件上传仅需用到四个模块。不管怎么说,程序开始前,还是老老实实导包吧,这个过程是必须的。
文件上传实列需要用的模块有:
1. express
2. multer
3. path
4. fs

代码开始,导入三方模块
程序初始化。

node

const express = require('express');		//express http 框架
const fs = require('fs');	//
const multer = require('multer');	//处理multitype 格式的文件上传。
const objMulter = multer({dest:'.www/upload'})	//调用multer返回对象,指定上传文件保存位置。
const pathLib = require('path');	

var  server = express();
server.listen(80);


html

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

后端初始化完成,接下来分析,为完成文件上传功能,我们需要做的有。

  • 上传文件地址(上传文件保存地址)
  • 接受文件(获取存放服务器端文件基本信息)
  • ( post文件上传,前端我们需要设置表单上传数据类型)

暂时先是这样一个思路,其他文件类型,上传文件大小限制且不说。

前端设置form数据格式,  enctype="multipart/form-data' 

文件上传位置设置。

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

对,初始化过程已经完成文件上传保存目录。
导入multer模块,调用并传入option, dest属性值用于指定存放路径。这里我们在项目根目录创建/www并创建子目录/upload用于存放上传文件。

获取接受文件
在这里插入图片描述
通过req.files中,获取上传文件信息。
在这里插入图片描述

server.use(objMulter.any());    //向express注册multer
server.use('/', (req, res) => {
    //req.body普通表单数
    //req.files正真的上传文件

    //获取原始文件名
    //path + 扩展名(上床文件扩展名)
    var newName = req.files[0].path + pathLib.parse(req.files[0].originalname).ext;

    fs.rename(req.files[0].path, newName, (err) => {
        if(err){
            // res.send('上传失败');
            res.send(err)
        }else{
            res.send('success');
        }
    });
	console.log(req.files)
});

req.files结果
在这里插入图片描述

为了防止上传的文件重名,服务端对计算机原始文件名进行了随机命名
可以看出上面文件信息,源文件是 test.html 上传过后,文件名是 path。还有一点,上传的文件是二进制内容,是无法获取文件内容的。

对此怎么办呢。记得fs系统模块有一个,rename的api,可以文件重命名。添加扩展名。这样就能打get文件内容

fs.rename(pramas1,prmas2,callback)
参数解读:
第一个是pramas1是原文件名,
pramas2新文件名。
callback异步回调
在这里插入图片描述
结果
可以看到,文件已经上传成功了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值