[REACT] 파일 post application/octet-stream 였λ₯˜ ν•΄κ²°: ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„ 데이터 전솑 팁

2024. 11. 23. 11:56Β· π™΅πš›πš˜πš—πšπšŽπš—πš/𝚁𝚎𝚊𝚌𝚝
λͺ©μ°¨
  1. 문제 λ°œμƒ
  2. 초기 μ½”λ“œ
  3. ν•΄κ²° 방법
  4. μ½”λ“œ κ²°κ³Ό
λ°˜μ‘ν˜•

 

 

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„ 데이터λ₯Ό 주고받을 λ•Œ, 특히 파일 μ—…λ‘œλ“œμ™€ JSON 데이터λ₯Ό ν•¨κ»˜ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” 경우, μ˜¬λ°”λ₯Έ Content-Type 섀정이 μ€‘μš”ν•˜λ‹€.

졜근 ν”„λ‘œμ νŠΈμ—μ„œ FormDataλ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ„œλ²„λ‘œ μ „μ†‘ν•˜λ˜ 쀑 HttpMediaTypeNotSupportedException: Content-Type 'application/octet-stream' is not supported 였λ₯˜λ₯Ό λ§Œλ‚¬λ‹€.

이 였λ₯˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ³΄λ‚΄λŠ” μš”μ²­μ˜ Content-Type이 μ„œλ²„μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν˜•μ‹μΌ λ•Œ λ°œμƒν•œλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œμ™€ μ„œλ²„ κ°„μ˜ 데이터 직렬화 및 전솑 방식을 μˆ˜μ •ν–ˆλ‹€.

 

 


 

 

문제 λ°œμƒ

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ FormDataλ₯Ό μ‚¬μš©ν•΄ 데이터λ₯Ό 전솑할 λ•Œ, 객체 데이터λ₯Ό μ§λ ¬ν™”ν•˜μ§€ μ•Šκ³  μΆ”κ°€ν•˜κ±°λ‚˜, 파일 데이터λ₯Ό ν•¨κ»˜ μ²˜λ¦¬ν•˜λ©΄μ„œ μ˜¬λ°”λ₯Έ λ―Έλ””μ–΄ νƒ€μž…μ„ μ„€μ •ν•˜μ§€ μ•Šμ•„ λ¬Έμ œκ°€ λ°œμƒν–ˆλ‹€.

μ„œλ²„μ—μ„œλŠ” @RequestPart둜 MultipartFileκ³Ό JSON 데이터λ₯Ό μ²˜λ¦¬ν•˜λ € ν–ˆμ§€λ§Œ, application/octet-streamκ³Ό 같은 κΈ°λ³Έ λ°”μ΄λ„ˆλ¦¬ νƒ€μž…μœΌλ‘œ μ „μ†‘λœ 데이터가 μ˜¬λ°”λ₯΄κ²Œ λ§€ν•‘λ˜μ§€ μ•Šμ•„ HttpMediaTypeNotSupportedException 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€.

 

 

 

초기 μ½”λ“œ

κΈ°μ‘΄ μ½”λ“œμ—μ„œλŠ” λ‹€μŒκ³Ό 같이 vo 객체λ₯Ό κ·ΈλŒ€λ‘œ FormData에 μΆ”κ°€ν•˜κ³  μžˆμ—ˆλ‹€:

formData.append('vo', JSON.stringify(vo));

 

이 방식은 데이터 직렬화 μžμ²΄λŠ” μ˜¬λ°”λ₯΄μ§€λ§Œ, μ„œλ²„κ°€ application/octet-stream ν˜•νƒœμ˜ λ°μ΄ν„°λ‘œ 인식해 μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.

 

 

 

 

 

 

ν•΄κ²° 방법

였λ₯˜λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, vo 객체λ₯Ό JSON으둜 μ§λ ¬ν™”ν•œ ν›„, Blob 객체둜 λ³€ν™˜ν•˜μ—¬ Content-Type을 λͺ…μ‹œμ μœΌλ‘œ application/json으둜 μ§€μ •ν–ˆλ‹€. 이후 이λ₯Ό FormData에 μΆ”κ°€ν–ˆλ‹€:

 
const json = JSON.stringify(vo); 
const blob = new Blob([json], { type: "application/json" }); 
formData.append("vo", blob);

 

 

μ½”λ“œ κ²°κ³Ό

μ΅œμ’…μ μœΌλ‘œ μˆ˜μ •λœ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€:

const formData = new FormData(); 
const json = JSON.stringify(vo); 
const blob = new Blob([json], { type: "application/json" }); 
formData.append("vo", blob); 

appendFileIfNeeded('images', postData.image, postData.prevImageId, formData); 
appendFileIfNeeded('files', postData.file, postData.prevFileId, formData);

 

@RequestPartλ₯Ό 톡해 JSON 데이터와 파일 데이터λ₯Ό λ™μ‹œμ— λ§€ν•‘ν•  수 μžˆμ—ˆλ‹€.

 

 

 

 

 

 

 

λ°˜μ‘ν˜•

'π™΅πš›πš˜πš—πšπšŽπš—πš > 𝚁𝚎𝚊𝚌𝚝' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[React] Zustand둜 둜그인 μƒνƒœ κ΄€λ¦¬ν•˜κΈ°: μ½”λ“œ + κ°œλ… μ„€λͺ…  (0) 2025.04.10
[REACT] Not Allowed to Load Local Resource 였λ₯˜ ν•΄κ²° 및 Apache HTTP Server μ„€μ • 방법  (0) 2024.11.22
  1. 문제 λ°œμƒ
  2. 초기 μ½”λ“œ
  3. ν•΄κ²° 방법
  4. μ½”λ“œ κ²°κ³Ό
'π™΅πš›πš˜πš—πšπšŽπš—πš/𝚁𝚎𝚊𝚌𝚝' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [React] Zustand둜 둜그인 μƒνƒœ κ΄€λ¦¬ν•˜κΈ°: μ½”λ“œ + κ°œλ… μ„€λͺ…
  • [REACT] Not Allowed to Load Local Resource 였λ₯˜ ν•΄κ²° 및 Apache HTTP Server μ„€μ • 방법
ν•΄λ²„λ‹ˆ
ν•΄λ²„λ‹ˆ
κ°œλ°œν•˜λ©΄μ„œ 배운 것듀을 κΈ°λ‘ν•©λ‹ˆλ‹€.
ν•΄λ²„λ‹ˆ
DevNight
ν•΄λ²„λ‹ˆ
전체
였늘
μ–΄μ œ
  • 전체보기 (194)
    • πšπšŽπšπš›πš˜πšœπš™πšŽπšŒπšπš’πšŸπšŽπšœ (5)
      • πšƒπš’πš™πšœ (2)
      • 회고 (3)
      • μ‹€μˆ˜ λͺ¨μŒμ§‘ (0)
    • π™Ώπš›πš˜πš“πšŽπšŒπš (3)
      • π™Ίπ™Ύπš‚πšƒπ™° πš†πšŽπš‹ π™Ώπš›πš˜πš“πšŽπšŒπš (2)
    • π™Ώπš›πš˜πšπš›πšŠπš–πš–πš’πš—πš π™»πšŠπš—πšπšžπšŠπšπšŽ (16)
      • π™·πšƒπ™Όπ™» (6)
      • π™²πš‚πš‚ (1)
      • π™Ήπ™°πš…π™° (1)
      • π™ΉπšŠπšŸπšŠπš‚πšŒπš›πš’πš™πš (7)
      • πšƒπš’πš™πšŽπš‚πšŒπš›πš’πš™πš (1)
    • π™±πšŠπšŒπš”πšŽπš—πš (4)
      • πš‚πš™πš›πš’πš—πš π™±πš˜πš˜πš (0)
      • Spring (2)
      • 파일 처리 (1)
      • π™Ήπš‚π™Ώ (1)
    • π™΅πš›πš˜πš—πšπšŽπš—πš (5)
      • 𝚁𝚎𝚊𝚌𝚝 (3)
      • πš…πšžπšŽ.πš“πšœ (2)
    • π™°πš•πšπš˜πš›πš’πšπš‘πš– (32)
      • π™Ώπš›πš˜πšπš›πšŠπš–πš–πšŽπš›πšœ (6)
      • π™±πšŠπšŽπš”πš“πš˜πš˜πš— (24)
    • π™³π™°πšƒπ™°π™±π™°πš‚π™΄ (16)
      • πš‚πš€π™» (1)
      • π™Ώπš˜πšœπšπšπš›πšŽπš‚πš€π™» (1)
      • π™Όπš’πš‚πš€π™» (3)
      • π™Ύπš›πšŠπšŒπš•πšŽ (0)
      • π™Ώπš›πš˜πšπš›πšŠπš–πš–πšŽπš›πšœ (1)
    • π™³πšŽπšŸπšŽπš•πš˜πš™πš–πšŽπš—πš πšƒπš˜πš˜πš•πšœ (4)
      • π™Έπš—πšπšŽπš•πš•πš’π™Ή (0)
      • π™΄πšŒπš•πš’πš™πšœπšŽ (1)
      • πš…πš‚π™²πš˜πšπšŽ (0)
      • π™±πšžπš’πš•πš πš‚πšŒπš›πš’πš™πšπšœ (1)
    • πš…πšŽπš›πšœπš’πš˜πš— π™²πš˜πš—πšπš›πš˜πš• (0)
      • π™Άπš’πš (0)
      • π™Άπš’πšπ™·πšžπš‹ (0)
      • πš‚πš…π™½ (0)
    • 배포 및 인프라 (2)
      • π™°πš†πš‚ (2)
    • π™Έπšƒ (15)
      • πš‚πš…π™½ (3)
    • π™ΉπšŠπšŸπšœπš‚πšŒπš›πš’πš™πš (4)
      • πš…πšžπšŽ.πš“πšœ (0)
    • πš†πšŽπš‹ (9)
      • 𝚊𝚠𝚜 (0)
      • π™·πšƒπ™Όπ™» (0)
      • π™²πš‚πš‚ (2)
    • π™ΉπšŠπšŸπšŠ (56)
      • πš‚πš™πš›πš’πš—πš π™±πš˜πš˜πš (3)
    • π™Άπš’πšπ™·πšžπš‹ (10)
    • ν™˜κ²½μ„€μ • (10)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

νƒœκ·Έ

  • PostgreSQL
  • database
  • Java
  • php
  • JavaScript
  • μžλ°”μ˜μ •μ„
  • μžλ°”μŠ€ν¬λ¦½νŠΈ
  • web
  • React
  • λ°°μ—΄
  • μžλ°”
  • 이클립슀
  • spring
  • μ•Œκ³ λ¦¬μ¦˜
  • λ°±μ€€
  • μ½”λ”©ν…ŒμŠ€νŠΈ
  • html
  • ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
  • μ˜€λΈ”μ™„
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

졜근 λŒ“κΈ€

졜근 κΈ€

hELLO Β· Designed By μ •μƒμš°.v4.3.0
ν•΄λ²„λ‹ˆ
[REACT] 파일 post application/octet-stream 였λ₯˜ ν•΄κ²°: ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„ 데이터 전솑 팁
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.