1 Star 0 Fork 0

吴宇娜/my_nana

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
01.level2 - 上传文件.html 3.62 KB
一键复制 编辑 原始数据 按行查看 历史
吴宇娜 提交于 2021-05-15 22:52 . 提交消息
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./lib/bootstrap-v4.6.0.css">
<style>
body {
padding: 10px;
}
.thumb {
display: block;
width: 500px;
height: 340px;
background-color: #efefef;
margin-top: 30px;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-sm-4">
<div class="custom-file">
<!-- 文件选择框 -->
<input type="file" accept="image/png, image/jpeg, image/gif" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose image</label>
</div>
</div>
<div class="col-sm-4">
<!-- 上传图片的按钮 -->
<button class=" btn btn-primary" id="btnUpload">上传图片</button>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<!-- 上传的进度条 -->
<div class="progress mt-3">
<div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="25" aria-valuemin="0"
aria-valuemax="100">0%</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<figure class="figure">
<!-- 缩略图 -->
<img src="..." class="thumb figure-img img-fluid rounded" alt="已上传的图片">
<figcaption class="figure-caption">已上传的图片</figcaption>
</figure>
</div>
</div>
</div>
<script>
// TODO:实现上传文件的功能
// 1. 封装上传文件的方法
function uploadImage(fd) {
const xhr = new XMLHttpRequest()
// 监听上传完成的 load 事件
xhr.addEventListener('load', function () {
const res = JSON.parse(xhr.response)
// 判断是否上传成功
if (res.status === 200) {
// 为 img 标签的 src 属性赋值
document.querySelector('.thumb').setAttribute('src', 'http://www.liulongbin.top:3006' + res.url)
}
})
// 监听文件上传的进度 progress
xhr.upload.addEventListener('progress', function (e) {
if (e.lengthComputable) {
// 动态计算出上传的百分比
const percent = Math.ceil(e.loaded / e.total * 100)
// 获取到进度条的 DOM 对象
const progressBar = document.querySelector('.progress-bar')
// 设置内容
progressBar.innerHTML = `${percent}%`
// 设置样式
progressBar.setAttribute('style', `width: ${percent}%;`)
}
})
xhr.open('POST', 'http://www.liulongbin.top:3006/api/upload/avatar')
// 把 FormData 格式的请求体发送给服务器
xhr.send(fd)
}
// 2. 为上传按钮绑定点击事件处理函数
document.querySelector('#btnUpload').addEventListener('click', function () {
// 2.1 获取到文件选择框的 DOM 对象
const inputFile = document.querySelector('#customFile')
// 2.2 获取到用户选择的文件列表(伪数组)
const files = inputFile.files
// 2.3 判断用户是否选择了待上传的文件
if (files.length === 0) return alert('请选择要上传的图片!')
// 2.4 创建 FormData 对象,并 append 头像的文件
const fd = new FormData()
fd.append('avatar', files[0])
// 2.5 调用刚才封装的 uploadImage() 方法,实现文件的上传
uploadImage(fd)
})
</script>
</body>
</html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wu-yuna/my_nana.git
git@gitee.com:wu-yuna/my_nana.git
wu-yuna
my_nana
my_nana
master

搜索帮助