> 웹 프론트엔드 > 프런트엔드 Q&A > 양식 및 FormData를 사용하여 파일 제출.

양식 및 FormData를 사용하여 파일 제출.

jacklove
풀어 주다: 2018-06-11 22:38:45
원래의
3119명이 탐색했습니다.


1.

파일 제출 지침을 진행하기 전에 먼저 양식 태그를 검토해 보겠습니다. form에는 많은 속성이 있습니다. 여기서는 다음 두 가지 속성만 설명하겠습니다.

1, method (enctype은 'application/x-www-form-urlencoded')

대형 경우에는 GET 및 POST만 사용됩니다.

①GET: 양식 제출을 위해 GET을 사용하는 경우 사용자 에이전트(브라우저)는 이름=값에 따라 각 입력 구성요소를 자동으로 처리합니다. (encodeURIComponent를 사용하여 이름과 값을 각각 인코딩한 다음 '='를 사용하여 인코딩된 키를 연결합니다. -값 쌍, 여러 개의 키-값 쌍이 '&'를 사용하여 연결되어 URL 끝에 연결되는 쿼리 문자열을 생성합니다. ㅋㅋ ~                                                .

둘 사이의 주요 차이점은 다음과 같습니다. GET에는 제출된 데이터의 크기가 일반적으로 2kb로 제한되는 반면 POST에는 이론상 제한이 없습니다(그러나 실제 크기는 약 2GB입니다).

2.enctype


위에서 언급했듯이 form의 기본값은 enctype의 세 가지 값 중 하나인 'application/x-www-form-urlencoded'입니다. 다음 세 가지 값.


①application/x-www-form-urlencode

: 양식 제출의 기본값입니다. POST 및 GET에 해당하는 동작은 위에서 논의되었으므로 여기서는 설명하지 않습니다. 이 값을 사용하면 양식 값이 인코딩되지 않지만 일반 텍스트로 백엔드 서버에 제출됩니다. 이 값은 파일을 제출할 때 바이너리 데이터를 제대로 지원할 수 없기 때문에 기본적으로 쓸모가 없습니다.

3multipart/form-data

: enctype이 이 옵션을 사용하면 브라우저는 문자를 인코딩하지 않고 대신 컨트롤(입력 등) 단위로 분할하고 각 컨트롤에 콘텐츠를 추가합니다. -Disposition: form-data, name(입력에 해당하는 이름), filename(파일을 제출하면 변경된 필드가 있음), Content-Type(이전 필드와 동일, 파일 제출 시 존재함): 파일 형식(매우 쉽게 위조됨). 그리고 경계(구분자, 다른 브라우저, 각 제출이 다름)도 추가됩니다


마지막으로 이 정보는 함께 통합되어 메시지로 인코딩되어 서버에 제출됩니다(바이너리 데이터 형식). ).

주의해야 할 점:

주된 목적은 파일을 업로드하는 것이므로 업로드 크기에 대한 특정 요구 사항이 있으므로 업로드에 GET을 사용하는 경우 방법은 POST로만 선택할 수 있습니다. 파일이 제출됩니다. 이 옵션은 파일을 업로드할 때 반드시 사용해야 하는 옵션입니다. enctype을 "multipart/form-data"로 설정한 후 을 사용하여 파일을 업로드할 수 있습니다.

  1. <form action="server.js" method="POST" enctype="다중 부분 /form-data">  

  2.   <input type="file" name="file0" >  

  3. <input type="submit"value="upload" >

  4. 양식>

  5. 2. FormData

FormData는 ES에서 제공하는 API로, ajax 파일 제출을 구현하는 데 사용할 수 있습니다.


FormData 사용 방법을 살펴보겠습니다.

var formData = new FormData(); //인스턴스를 생성하려면 해당 폼에 해당하는 DOM 노드를 매개변수로 전달하면 해당 폼의 데이터가 formData 인스턴스에 저장됩니다.

FormData.append(name, value); //append 메소드를 사용하고 해당 키와 값을 전달합니다.

// 기타 코드

마지막으로 양식 인스턴스를 xhr.send();에 넣습니다.

xhr.send(formData);

var xhr = new XMLHttpRequest();
//使用FormData构造函数创建一个FormData的实例 
var formData = new FormData(); 
// formData.append(&#39;file0&#39;, oInput.value);
//注意,这里的value不是普通的表单value,而是一个file对象 
formData.append(&#39;file0&#39;, oInput.files[0]); 
xhr.open(&#39;POST&#39;, &#39;http://localhost:8080&#39;);  
xhr.onload = function(){  
  if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {  
    console.log(xhr.responseText);  
  }  
};
//form表单的默认值为①,而FormData的默认值为multipart/form-data,所以不用画蛇添足的去修改请求头  
//xhr.setRequestHeader(&#39;Content-Type&#39;, &#39;multipart/form-data&#39;);
xhr.send(formData);
로그인 후 복사

위에서 언급한 것처럼 추가로 전달된 값은 일반적인 입력 값이 아니고 파일 객체입니다. 파일 객체에 대한 지식은 공간에 의해 제한되어 설명하지 않습니다. 지금은 관심이 있으시면 직접 검색해 보세요.

이 외에도 파일 작업은 일반적인 작은 크기 파일뿐만 아니라 비디오 웹 사이트의 비디오와 같은 대용량 파일 작업과 더 유사합니다. 이러한 작업을 완료하는 것만으로는 충분하지 않습니다. 또한 관련 API를 배우고 Blob 개체에 대해 깊이 이해하십시오. 나중에 직접 가서 배울 수 있습니다. 이 측면에 대한 요약을 나중에 게시하겠습니다.

이 글에서는 form과 FormData를 이용한 파일 제출과 관련된 내용을 설명하고 있습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해주세요.


관련 권장사항:

JQuery의 DOM 작업 - Wrap

django는 요청을 사용하여 브라우저에서 보낸 매개변수를 가져옵니다.


React 이 바인딩에 대한 몇 가지 생각

위 내용은 양식 및 FormData를 사용하여 파일 제출.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿