上传头像功能的前后端交互。

创建工程。

关于工程的创建,前面的文章中已经做过介绍,此处不再赘述。本文的操作仍需要,express和multer两个依赖项。

链接附上:https://blog.csdn.net/qq_39138295/article/details/82192124

创建完毕之后,工程项目下的文件目录截图如下图所示:

这个工程项目比前几篇文章多了一个allHeaders 的文件夹,这个文件夹是用来储存图片的,以保证后面后端给前端发送图片之用。

主要功能和起作用的位置有两点:

1.当在页面上上传图片之后,会保存到这个文件。

2.当前端需要后端给图片数据的时候,会从这个文件中读取获得。

先进入index.html前端文件,进行设置。

设置按钮操作代码如下:

<form action="/upload" method="POST" enctype="multipart/form-data" >

<input type="file" accept="image/jpg,image/png,image/jpeg,image/gif" required = 'required' name="photo">

<input id="sub" type="submit" value="上传头像">

</form>

此时打开浏览器:显示的界面如下:

通过上面的操作可以选择好图片,

此时我们就要对后端进行设置了,这个时候已经刚刚完成了前端的上传功能的部分按钮。

这个时候,我们进入index.js文件中:

var express = require('express')

var bodyParser = require('body-parser')

var multer = require('multer')

var web = express()

web.use(express.static('public'))

web.use(bodyParser.urlencoded({extended:false}))

先将这几句必须的代码写好。

接着我们在后端创建文件,来保存我们上传的图片:

代码如下:

前端设置:

<script>

var sub = document.getElementById('sub')

// 增加一个事件监听对象

sub.addEventListener('click',function(){

setTimeout(function(){

window.location.href = 'http://localhost:8080'

},10)

})

</script>

后端设置:

var account = 123321

var fullName = ''

// 当前配置信息不负责上传头像,上传头像由前端负责

// 当前配置信息只负责设置图片的存储路径以及设置图片的名字

var headerConfig = multer.diskStorage({

// 存储的路径

destination:'public/allHeaders',

// 设置图片的名称

filename:function(req,file,callback){

// 以.分割原始名字(验证码.png)

var name = file.originalname.split('.')

var fileType = name[name.length-1]

account++

// callback回调函数生成图片的名称需要两个值

// 值1:错误信息

// 值2:图片名称

fullName = account+'.'+fileType

callback(null,account+'.'+fileType)

}

})

// 创建一个加载配置信息的upload对象

var upload = multer({storage:headerConfig})

web.post('/upload',upload.single('photo'),function(req,res){

res.send('')

})

web.listen('8080',function(){

console.log('服务器启动......')

})

此时,我们重启服务器,重新加载网页,点击上传之后,便会看到,工程目录下的allHeaders文件夹下已经有了图片。

工程文件夹目录下的所有文件如下图所示:

这个时候我们已经把图片保存好了,接下来只需要再完成将图片在前端请求数据的时候,将这个图片发送给前端,前端接收之后,在界面上显示出来就完成了上传头像的所有功能,是不是很简单?

此时,前端对后端发送一个get请求,然后后端在接收到请求之后向前端发送图片,前端接收之后在浏览器界面显示出来。

前端设置:

function getHeader(){

var xhr = new XMLHttpRequest()

xhr.open('get','/getHeader')

xhr.send()

后端设置:

web.get('/getHeader',function(req,res){

res.send('allHeaders/'+fullName)

})

此时完成了发送数据之间的所有功能。接下来要做的工作就是在前端创建个显示图片的标签。

具体代码如下:

xhr.onreadystatechange = function(){

if(xhr.readyState == 4)

{

var headers = document.createElement('img')

headers.style.width = '200px'

headers.style.height = '200px'

headers.style.borderRadius = '50%'

headers.style.border = '10px solid white'

headers.src = xhr.responseText

document.body.appendChild(headers)

}

}

下附所有完整代码。通过本篇介绍,我们主要用到的文件,只有前端的index.html和后端的index.js两个文件:

前端所有代码:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>上传图片</title>

<style>

body {

background-color: yellow;

}

</style>

</head>

<body>

<form action="/upload" method="POST" enctype="multipart/form-data">

<input type="file" accept="image/jpg,image/png,image/jpeg,image/gif" required='required' name="photo">

<input id="sub" type="submit" value="上传头像">

</form>

<script>

var sub = document.getElementById('sub')

// add增加 event时间 listenter监听者

// 增加一个事件监听对象

sub.addEventListener('click', function () {

setTimeout(function () {

window.location.href = 'http://localhost:8080'

}, 10)

})

getHeader()

function getHeader() {

var xhr = new XMLHttpRequest()

xhr.open('get', '/getHeader')

xhr.send()

xhr.onreadystatechange = function () {

if (xhr.readyState == 4) {

var headers = document.createElement('img')

headers.style.width = '200px'

headers.style.height = '200px'

headers.style.borderRadius = '50%'

headers.style.border = '10px solid white'

headers.src = xhr.responseText

document.body.appendChild(headers)

}

}

}

</script>

</body>

</html>

后端所有代码:

var express = require('express')

var bodyParser = require('body-parser')

var multer = require('multer')

var web = express()

web.use(express.static('public'))

web.use(bodyParser.urlencoded({extended:false}))

var account = 123321

var fullName = ''

// 当前配置信息不负责上传头像,上传头像由前端负责

// 当前配置信息只负责设置图片的存储路径以及设置图片的名字

var headerConfig = multer.diskStorage({

// 存储的路径

destination:'public/allHeaders',

// 设置图片的名称

filename:function(req,file,callback){

// 以.分割原始名字(验证码.png)

var name = file.originalname.split('.')

var fileType = name[name.length-1]

account++

// callback回调函数生成图片的名称需要两个值

// 值1:错误信息

// 值2:图片名称

fullName = account+'.'+fileType

callback(null,account+'.'+fileType)

}

})

// 创建一个加载配置信息的upload对象

var upload = multer({storage:headerConfig})

web.post('/upload',upload.single('photo'),function(req,res){

res.send('')

})

web.get('/getHeader',function(req,res){

res.send('allHeaders/'+fullName)

})

web.listen('8080',function(){

console.log('服务器启动......')

})

此时重启后端服务器,刷新浏览器界面,选择图片之后上传,然后点击上传头像按钮,得到的界面如下所示:

其他所有的上传头像的功能与此处流程基本类似。快去试试吧。

猜你喜欢

转载自blog.csdn.net/qq_39138295/article/details/82353858