React组件传参父子,爷孙,兄弟
vue引入echarts
path.resolve和path.join
Express实现文件上传原理 form enctype属性 path模块 multer模块
一、要实现文件上传原理要用到的知识点
- form enctype属性
- multer模块
- path模块
二、form enctype属性
注意
用form提交数据时,要提交的数据input标签都要有name属性,否则该值提交无效。
正常情况,form标签的enctype默认属性是 application/x-www-form-urlencoded
是以字符串形式传输的,这次实现文件上传要用到 multipart/form-data
1 | <form action="http://localhost:3000" method="post" enctype="multipart/form-data"> |
语法
<form enctype="value">
属性值
属性 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符 (默认) |
multipart/form-data | 不对字符编码。在使用包含文件上传 控件的表单时,必须使用该值。 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
三、multer模块
先安装 cnpm i multer --save
该模块是以中间件的形式存在的
用来接收form表单中的以文件形式上传的文件
例如:
1 | const multer = require('multer'); |
.any()
代表可以接受任何文件类型
可以用req.files
来查看接收的文件
例如:(req.files接收到的数据)
1 | [ { fieldname: 'file', // from表单中的name属性的属性值 |
接收的文件是以数组的形式发送到后端的,数组里面只有一项,是对象
属性 | 描述 |
---|---|
fieldname | Field name 由表单指定 |
originalname | 用户计算机上的文件的名称 |
encoding | 文件编码 |
mimetype | 文件的 MIME 类型 |
size | 文件大小(字节单位) |
destination | 保存路径 |
filename | 保存在 destination 中的文件名 |
path | 已上传文件的完整路径 |
buffer | 一个存放了整个文件的 Buffer |
multer({dest:'地址'})
自动帮你储存 - 名字自动改成hash值
防止重名
缺点:没有后缀
例子:
1 | const mysql = require('mysql'); |
打印的信息:
1 | [ |
效果图:
![1.png](/Express实现文件上传原理 form enctype属性 path模块 multer模块/1.png)
四、path模块
先安装 cnpm i path --save
path.parse(string)用来解析文件路径
1 | const path = require('path'); |
运行结果
1 | { root: 'C:', |
各个属性的描述
root
在什么根目录dir
绝对地址base
文件名+后缀ext
后缀name
文件名
五、最终代码
前端
1 | <form action="http://localhost:3000" method="post" enctype="multipart/form-data"> |
后端
1 | const express = require('express'); |
运行结果
![2.png](/Express实现文件上传原理 form enctype属性 path模块 multer模块/2.png)
![3.png](/Express实现文件上传原理 form enctype属性 path模块 multer模块/3.png)
若想要往数据库里传真正的文件名字需要,否则含有路径
1 | path.parse(src).name+path.parse(req.files[0].originalname).ext; |
第二种:直接在请求中完成
1 | // 前端编辑页面上传的商品图片 |
vue上typescript的用法
Vue.extend 和 vue-class-component
使用 TypeScript 写 Vue 组件时,有两种推荐形式:
Vue.extend()
:使用基础 Vue 构造器,创建一个“子类”。此种写法与 Vue 单文件组件标准形式最为接近,唯一不同仅是组件选项需要被包裹在 Vue.extend() 中。vue-class-component
:通常与vue-property-decorator
一起使用,提供一系列装饰器,能让我们书写类风格的 Vue 组件,和react写法很像,推荐这种写法,如果你会vue和react的话,用这种写法不容易对react的项目手生,不会react的话,用这种写法,会对后来对react的学习有很大的帮助。vue项目中安装
1 | npm i -S vue-class-component |
React只更新state中对象中的某一项值,setState中的回调
js检验对象类型的方法instanceof操作符Object.prototype.toString.call
用typeof能区别出string
, number
, boolean
, undefined
,object
instanceof
但是想要知道object是什么类型就要用 instanceof
操作符了数组(Array)
,对象(Object)
,正则(RegExp)
,null
,Function
都属于对象
1 | let arr = [1, 2, 3], |
结果图:
css3中flex如何实现子元素等分
一、属性
justify-content: space-between;
这个属性能够让子元素之间的间隔实现平均分配剩余空间,并没有让元素等分。
二、代码
1 | // html部分 |
实现的效果