JavaScript

FormData ์‚ฌ์šฉ๋ฒ• & ๊ฐœ๋…

martinooo 2022. 12. 22. 10:58
728x170

๐Ÿคท‍โ™‚๏ธ FormData๋ž€?


FormData ์•Œ์•„๋ณด๊ธฐ ์•ž์„œ ๋จผ์ € ํŒŒ์ผ์ด๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ์— ์ค‘์š”ํ•œ ๊ฐœ๋…์ธ multipart/form-data ์•Œ์•„์•ผํ•œ๋‹ค.

multipart/form-data ๊ฐ„๋žตํ•œ ์ •๋ฆฌ: 
http ๋ฉ”์‹œ์ง€์— Content-Type ์†์„ฑ์ด multipart/form-data๋กœ ์ง€์ •๋˜๊ณ  ์ •ํ•ด์ง„ ํ˜•์‹์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ „์†กํ•œ๋‹ค. 
์ฆ‰ ์ด๋ฏธ์ง€, ํŒŒ์ผ ๋“ฑ์ด png,  jpg ํŒŒ์ผ ์ž์ฒด๊ฐ€ ์ „์†ก๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋กœ ์ „์†ก๋œ๋‹ค. 

์ด๋ฏธ์ง€, ํŒŒ์ผ ๋“ฑ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ค„๋•Œ FormData ๊ฐ์ฒด๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ์ด ๋œ๋‹ค. 

 

// FormData ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ง์ ‘ form ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑ

let formData = new FormData(); // ์ƒˆ๋กœ์šด ํผ ๊ฐ์ฒด ์ƒ์„ฑ
formData.append('name','yoo'); // ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ถ”๊ฐ€
formData.append('age','29'); // <input name="item" value="29"> ์™€ ๊ฐ™๋‹ค.
formData.append('hobby','soccer'); // <input name="item" value="soccer">

 

์œ„์ฒ˜๋Ÿผ FormData ๊ฐ์ฒด์— append() ๋ฉ”์†Œ๋“œ๋กœ key์™€ value ๊ฐ’์„ ์ฐจ๋ก€๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด input ํƒœ๊ทธ์— ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„๋‹ค. 

 

 

๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์•Œ์•„๋‘๋ฉด ์ข‹์€ FormData ๋ฉ”์†Œ๋“œ๋งŒ ์ •๋ฆฌํ•ด๋ดค๋‹ค.

 

formData.append(name, value)
// - form์˜ name ๊ณผ value ๋ฅผ ํ•„๋“œ์˜ ์ถ”๊ฐ€
// - input์˜ name ์†์„ฑ๊ณผ value ์ž…๋ ฅ๊ฐ’ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ ํ•˜๋ฉด ๋œ๋‹ค.
 
formData.append(name, blob, fileName)
// - input ์˜ type ์ด 'file' ์ธ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
// - fileName์€ file์˜ ์ด๋ฆ„์˜ ํ•ด๋‹น

formData.has(name)
// - ์ฃผ์–ด์ง„ name ์˜ ํ•ด๋‹นํ•˜๋Š” ํ•„๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ true, ์—†์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜

formData.get(name)
// - ์ฃผ์–ด์ง„ name ์˜ ํ•ด๋‹น ํ•˜๋Š” ํ•„๋“œ value๋ฅผ ๋ฐ˜ํ™˜

formData.delete(name)
// - ์ฃผ์–ด์ง„ name ์œผ๋กœ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐ

 

FormData๊ฒฝ์šฐ ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— console.logํ˜น์€ FormData ์†์„ฑ์—์„œ ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

ํ™•์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— for๋ฌธ ์ˆœํšŒ๋ฅผ ํ•ด์„œ FormData์— ํ˜•ํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

let formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');
 
// ํผ ๊ฐ์ฒด key ๊ฐ’์„ ์ˆœํšŒ.
let keys = formData.keys();
for (const pair of keys) {
    console.log(pair); 
}
 
// ํผ ๊ฐ์ฒด values ๊ฐ’์„ ์ˆœํšŒ.
let values = formData.values();
for (const pair of values) {
    console.log(pair); 
}
 
// ํผ ๊ฐ์ฒด key ์™€ value ๊ฐ’์„ ์ˆœํšŒ.
let entries = formData.entries();
for (const pair of entries) {
    console.log(pair[0]+ ', ' + pair[1]); 
}

 

์‹ค์ œ ์ œ๊ฐ€ ์‚ฌ์šฉํ•œ FormData๋ฅผ ํ™œ์šฉํ•ด์„œ ์„œ๋ฒ„์— ์ „์†กํ• ๋•Œ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค.

# multipart/form-data ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ ๊ตฌ์„ฑ

const data = new FormData();
    data.append('img', images[0]);
    data.append('type', 'board');
    data.append('service', 'premium');
 
const result = await axios({
    method: 'post',
    url: '/papi/file/upload',
    data: data ,
    headers: {
      'Content-Type': `multipart/form-data`,
    },
 });

 

 

๊ทธ๋ฆฌ๋“œํ˜•