Frontend/JavaScript

[JAVASCRIPT] Fetch API & FormData๋ฅผ ์ด์šฉํ•œ ๋‹ค์ค‘ํŒŒ์ผ ์—…๋กœ๋“œ

_์„ฑํ˜ธ_ 2022. 4. 30. 01:41
728x90
๋ฐ˜์‘ํ˜•

โ— ์ƒํ’ˆ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ HTML

 <form
   	id="productInfo"
  	name="productInfo"
   	method="post"
  	onsubmit="return false;"
  	enctype="multipart/form-data"
>
	<table id="product-register-table" style="width: 100%; border: 1px solid black">
		<tr>
           	<td class="text-center">์ƒํ’ˆ ์ด๋ฏธ์ง€</td>
            	<td id="imageForm">
                  <input
                    id="productImage"
                    type="file"
                    onchange="addFile(this);"
                    multiple
          	/>
                  <div class="file-list"></div>
         	</td>
		</tr>
	</table>
    <button type="submit" class="btn btn-primary">๋“ฑ๋ก</button>
</form>

  • <form> ํƒœ๊ทธ์˜ enctype ์†์„ฑ๊ฐ’์€ multipart/form-data๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.  โ€ป๋งค์šฐ ์ค‘์š”โ€ป
  • <input> ํƒœ๊ทธ์˜ multiple ์†์„ฑ์€ <input> ์š”์†Œ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‘˜ ์ด์ƒ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” <input> ํƒœ๊ทธ์˜ type ์†์„ฑ๊ฐ’์€ file๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

โ— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ์ด์šฉ์„ ์œ„ํ•œ <button> ํƒœ๊ทธ 

<button type="submit" class="btn btn-primary">๋“ฑ๋ก</button>

 

โ— Fetch API & FormData๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„์— Request ์ „๋‹ฌ

<script>
	var myForm = document.getElementById('productInfo');
    	// <button> ํด๋ฆญ ์ด๋ฒคํŠธ
   	myForm.addEventListener('submit', function (e) {
        e.preventDefault();
        
  	var formData = new FormData();
       
        for (let i = 0; i < filesArr.length; i++) {
        	// ์‚ญ์ œ ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์ผ ๊ฒฝ์šฐ
         	if (!filesArr[i].is_delete) {
            	formData.append('files', filesArr[i]);
          }
        }
        fetch('http://localhost:8080/product', {
        	// post ๋ฐฉ์‹
          	method: 'post',
         	headers: {},
          	body: formData,
        })
       	// response.text() ๋ฉ”์†Œ๋“œ๋กœ ํŒŒ์‹ฑํ•œ text ๊ฐ’ ๋ฆฌํ„ด
      	.then(function (response) {
            return response.text();
       	})
      	// ๋ฆฌํ„ด๋ฐ›์€ text ๊ฐ’์„ ๋ฐ›์•„ ์›ํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰
       	.then(function (data) {
            console.log(data);
      	})
      	// error ์ฒ˜๋ฆฌ
      	.catch(function (error) {
           	console.log(error);
      	});
  });
</script>
  • fetch() ํ•จ์ˆ˜๋Š” ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ URL, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ Option ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ณ , Promise ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. URL์€ ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค.
  • ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋Š”, API ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ response ๊ฐ์ฒด๋ฅผ resolveํ•˜๊ณ , ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ error ๊ฐ์ฒด๋ฅผ reject ํ•ฉ๋‹ˆ๋‹ค.

 

โ— ๋‹ค์ค‘ํŒŒ์ผ ์—…๋กœ๋“œ์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

[JavaScript] ์ฒจ๋ถ€ํŒŒ์ผ ๋‹ค์ค‘ํŒŒ์ผ multiple ์—…๋กœ๋“œ

Ver1. ํŒŒ์ผ ์ฒจ๋ถ€ ์‹œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๊ฐ€ ๋„˜์œผ๋ฉด ํ˜„์žฌ ์„ ํƒ๋œ ํŒŒ์ผ์€ ์ „๋ถ€ ์ฒจ๋ถ€๋ฅผ ์•ˆ ํ•˜๋Š” ๋ฐฉ์‹. See the Pen [T] ๋‹ค์ค‘ํŒŒ์ผ ์—…๋กœ๋“œ v1 by green526 (@green526) on CodePen. Ver2. ํŒŒ์ผ ์ฒจ๋ถ€ ์‹œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋„˜์œผ๋ฉด ์ตœ๋Œ€..

purecho.tistory.com