文件上传,cookie和session,ejs和express脚手架的使用

目录

项目开发流程

文件上传

前端

后端

服务器处理完毕响应结果

cookie使用

为什么要使用cookie、session?

介绍

cookie特点

cookie实现原理

下载

引入并开启cookie功能

设置cookie

获取cookie

session使用

介绍

session特点

session与cookie的联系:

实现原理

下载

 引入并开启session功能

设置Session数据

访问Session数据

模板引擎ejs

ejs模板引擎简介

使用步骤

ejs语法

渲染语法

模板语法

数据渲染

分支

循环

包含文件

express脚手架

使用步骤

目录及文件介绍

koa框架

使用步骤

前后端数据交互总结


项目开发流程

把前端给的文件一一归类。

1、html页面放在views文件夹

2、静态资源放在static或public

3、配置一些post中间件(因为要接收post传递过来的参数)

4、配置开放静态资源的中间件

文件上传


前端

当表单中含有文件上传的表单项<input type="file" name="pic">时,则要把表单编码格式改为如下的格式:

    <form action="/doupload" method="post" enctype="multipart/form-data">
        <div>帐号:<input type="text" name="usr"></div>
        <div>密码:<input type="password" name="pwd"></div>
        <div>密码:<input type="password" name="repwd"></div>
        <div>头像:<input type="file" name="pic"></div>
        <div><input type="submit" value="注册"></div>
    </form>

后端

使用第三方formidable包来处理含有文件上传的表单,代码如下:

注意:在当前项目的根目录安装formidable包: npm i formidable

const experss = require('express');
const path = require('path');
const fs = require('fs');
//引用
const formidable = require('formidable');
var svgCaptcha = require('svg-captcha');

const app = experss();
app.listen(3000, () => {
    console.log(`web服务器工作在3000端口`);
});



//文件上传界面:
app.get('/uploads', (req, res) => {

    res.sendFile(path.join(__dirname, 'users.html'));
});

//处理含有文件上传的表单
app.post('/doupload', (req, res) => {
    let filePath = path.join(__dirname, 'uploads');
    //判断目录或文件是否存在:
    if (!fs.existsSync(filePath)) { //目录不存在时
        fs.mkdirSync(filePath); //创建目录
    }

    //uploadDir:设置文件上传成功后的存放位置
    const form = formidable({ multiples: true, uploadDir: filePath });
    form.parse(req, (err, fields, files) => {
        console.log(err, fields, files, 111);

            res.send('OK')
        }
    });


});

服务器处理完毕响应结果

保留原文件名:

生成及其他文件名:

1)年月日时分秒 + 8位随机数

2)使用第三方模块uuid(uuid包用来产生唯一字符串,这个唯一字符串可以作为改名之后的文件名),使用方法:uuid - npm

const experss = require('express');
const path = require('path');
const fs = require('fs');
const formidable = require('formidable');
var svgCaptcha = require('svg-captcha');

const app = experss();
app.listen(3000, () => {
    console.log(`web服务器工作在3000端口`);
});



//文件上传界面:
app.get('/uploads', (req, res) => {

    res.sendFile(path.join(__dirname, 'users.html'));
});

//处理含有文件上传的表单
app.post('/doupload', (req, res) => {


    let filePath = path.join(__dirname, 'uploads');
    //判断目录或文件是否存在:
    if (!fs.existsSync(filePath)) { //目录不存在时
        fs.mkdirSync(filePath); //创建目录
    }

    //uploadDir:设置文件上传成功后的存放位置
    const form = formidable({ multiples: true, uploadDir: filePath });
    // console.log(form, 333);

    form.parse(req, (err, fields, files) => {
        // console.log(err, fields, files, 111);

        if (err) { //表单处理失败
            res.send('表单处理失败');
        } else { //表单处理成功 

            //获取用户选择的要上传文件的文件名:
            let ufilename = files.pic.originalFilename;
            //获取用户选择的要上传文件的文件扩展名:
            let extNames = path.extname(ufilename);
            // console.log(extNames, 666);

            //生成新文件名:  完整文件名=文件名.扩展名
            let fullname = `${files.pic.newFilename}${extNames}`

            //将上传成功后生成的临时文件名改为正式文件名
            fs.renameSync(files.pic.filepath, `${filePath}/${fullname}`);

            res.send('OK')
        }
    });


});

使用jquery的ajax方法实现文件上传时要注意的事项:

data: new FormData($("#upfile")[0]), //文件上传的表单

processData: false, //设置jquery不处理表单数据

contentType: false, //设置jquery不处理表单编码

 在使用ajax实现文件上传需要验证用户身份时,用户身份数据(JWT数据)可以通过表单的隐藏域或ajax的请求头将用户身份数据发送到服务端。

   <div class="my_icon">
                    <form id="upfile">
                        <span>头像</span>
                        <a href="javascript:;">
                        <!-- type="hidden":隐藏域 -->
                        <input type="hidden" name="uid" id="uid">
                            <img src="../img/login/user.png" class="myIcon" />
                            <div class="change">
                                更换头像
                                <input name="pic" accept=".gif,.png,.jpg,.jpeg" type="file" class="btn_file" onchange="uploadHeaImg()" />
                            </div>
                        </a>
                    </form>
                </div>

    <script>
        function uploadHeaImg() 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值