JS 에서 FormData 클래스 구현 파일 업로드
위의 글 에서 말 했 듯 이FormReader 클래스 파일 업로드 실현그것 은 HTML 5 의 새로운 기능 으로 H5 를 지원 하지 않 는 브 라 우 저 에 서 는 사용 할 수 없습니다.이번에 JS 의 일반 클래스 FormData 를 소개 합 니 다.H5 브 라 우 저 환경 에서 도 파일 업로드 와 미리 보기 가 가능 하고 업로드 진행 도 모니터링 할 수 있 습 니 다.
사례 1:xhr.upload.onprogress 파일 의 업로드 진 도 를 감시 하고 동적 으로 표시 합 니 다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.progress {
width: 100px;
height: 10px;
background-color: #eee;
}
.progress-bar {
width: 0;
height: 10px;
background-color: blue;
}
</style>
</head>
<body>
<form action="" id="form">
<input type="file" name="file" id="file">
</form>
<div class="progress">
<div class="progress-bar" id="bar"></div>
</div>
<script>
var file = document.getElementById("file");
var bar = document.getElementById("bar");
file.onchange = function () {
var formData = new FormData();
//
formData.append('attrName', this.files[0]);
var xhr = new XMLHttpRequest();
xhr.open("post", "/upload");
// xhr.upload.onprogress
xhr.upload.onprogress = function (ev) {
// ev.loaded ,ev.total
var result = (ev.loaded / ev.total * 100).toFixed(2) + '%';
// result
bar.style.width = result;
bar.innerHTML = result;
}
xhr.send(formData);
xhr.onload = function () {
if(xhr.status == 200) {
console.log(xhr.responseText);
}
}
}
</script>
</body>
</html>
사례 2:서버 에서 업로드 경 로 를 되 돌려 클 라 이언 트 가 업로드 한 그림 효 과 를 미리 볼 수 있 도록 합 니 다.우리 집 예 쁜 잘 생 긴 사진 미리 보기 성공.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.progress {
display: inline-block;
width: 600px;
height: 20px;
border-radius: 5px;
background-color: #eee;
}
.progress-bar {
width: 0;
height: 20px;
background-color: orange;
border-radius: 5px;
font-size: 16px;
text-align: center;
color: #fff;
}
</style>
</head>
<body>
<form action="" id="form">
<input type="file" name="file" id="file">
<div class="progress">
<div class="progress-bar" id="bar"></div>
</div>
</form>
<div id="box"></div>
<script>
var file = document.getElementById("file");
var bar = document.getElementById("bar");
var box = document.getElementById("box");
file.onchange = function () {
var formData = new FormData();
//
formData.append('attrName', this.files[0]);
var xhr = new XMLHttpRequest();
xhr.open("post", "/upload");
xhr.upload.onprogress = function (ev) {
// ev.loaded ,ev.total
var result = (ev.loaded / ev.total * 100).toFixed(2) + '%';
// result
bar.style.width = result;
bar.innerHTML = result;
}
xhr.send(formData);
xhr.onload = function () {
if(xhr.status == 200) {
var result = JSON.parse(xhr.responseText);
var img = document.createElement('img');
img.src = result.path;
// , ,
img.onload = function () {
box.appendChild(img);
}
}
}
}
</script>
</body>
</html>
nodejs 서버 쪽 의 일부 코드:
app.post('/upload', (req, res) => {
// formidable
const form = new formidable.IncomingForm();
//
form.uploadDir = path.join(__dirname, 'public', 'uploads');
//
form.keepExtensions = true;
// FormData
form.parse(req, (err, fileds, files) => {
// json
res.send({
path: files.attrName.path.split('public')[1]
});
})
})
더 많은 하 이 라이트 내용 은 주제<ajax 업로드 기술 집합>,《자 바스 크 립 트 파일 업로드 조작 집 합》와<jQuery 업로드 조작 집계>를 참고 하여 학습 하 시기 바 랍 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.