JS 에서 FormData 클래스 구현 파일 업로드

본 논문 의 사례 는 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 업로드 조작 집계>를 참고 하여 학습 하 시기 바 랍 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기