Appearance
html
<!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>
<style>
.mask {
background-color: rgba(0, 0, 0, .7);
}
.upload-container {
position: relative;
width: 500px;
height: 100%;
border: 1px solid #ebebeb;
margin: 0 auto;
margin-top: 50px;
box-shadow: 3px 3px rgba(0, 0, 0, .3);
padding: 0 30px;
padding-bottom: 50px;
}
.upload-container .upload-mask-tip {
display: none;
color: #fff;
text-align: center;
position: absolute;
z-index: 9;
top: 50%;
left: 0;
right: 0;
}
.upload-container .upload-img-container {
width: 150px;
margin: 0 auto;
margin-top: 30px;
}
.upload-container .upload-img-container .upload-img {
width: 100%;
height: 100%;
}
.upload-container .upload-tip-container {
margin-top: 30px;
text-align: center;
font-size: 14px;
}
.upload-container .upload-tip-container a {
text-decoration: none;
}
</style>
</head>
<body>
<section class="upload-container">
<span class="upload-mask-tip">正在上传中, 请稍等...</span>
<input name="upload-inp" type="file" style="display: none;">
<div class="upload-img-container">
<img class="upload-img" src="./static/upload.png" alt="">
</div>
<div class="upload-tip-container">
<span>将图片拖拽到此上传, 或</span>
<a onclick="uploadByClick()" href="javascript:;">点击此处</a>
<span>上传</span>
</div>
</section>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.10.1/qs.js"></script>
<script src="./request.js"></script>
<script>
let uploadContainer = document.querySelector('.upload-container'),
uploadInp = uploadContainer.querySelector('[name=upload-inp]'),
uploadMaskTip = uploadContainer.querySelector('.upload-mask-tip'),
file = null
async function upload (file) {
let formData = new FormData
formData.append('file', file)
formData.append('filename', file.name)
// 遮罩层
uploadContainer.classList.toggle('mask')
uploadMaskTip.style.display = 'block'
try {
let data = await instance.post('/upload-single', formData)
if (data.status === 0) {
alert('上传成功')
return
}
throw data.statusText
} catch (error) {
alert('上传失败')
} finally {
uploadInp.value = ''
file = null
uploadContainer.classList.toggle('mask')
uploadMaskTip.style.display = 'none'
}
}
function uploadByClick () {
uploadInp.click()
}
function uploadByDrag (event) {
event.preventDefault() // 阻止默认打开新标签页预览图片
file = event.dataTransfer.files[0] // 获取图片信息
if (file) {
upload(file)
}
}
uploadInp.addEventListener('change', function () {
file = this.files[0]
if (file) {
upload(file)
}
})
uploadContainer.addEventListener('dragover', function (event) {
event.preventDefault() // 阻止默认打开新标签页预览图片
})
uploadContainer.addEventListener('drop', uploadByDrag)
</script>
</body>
</html>