250x250
๋ฐ˜์‘ํ˜•
arkhyeon
arkhyeon
arkhyeon
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (88)
    • Spring (5)
    • Java (4)
    • React (25)
      • TypeScript (6)
      • JavaScript (1)
      • Jest (9)
    • NEXT (8)
    • SQL (1)
    • React native (1)
    • CSS (3)
    • Web (1)
    • Git (3)
    • ETC (6)
    • ๋น…๋ฐ์ดํ„ฐDB (8)
    • Docker (4)
    • Tool (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • react jest
  • javascript wss
  • jest
  • websocket
  • node WebSocket
  • kudu
  • usetransition
  • react
  • react spring websocket
  • react loading
  • react19
  • docker tomcat
  • WSS
  • react typescript
  • websocket server
  • HIVE
  • react usetransition
  • Spring WebSocket
  • javasciprt websocket
  • react websocket

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
arkhyeon

arkhyeon

NEXT

Only plain objects, and a few built-ins, can be passed to Server Actions.

2024. 10. 8. 14:07
728x90
๋ฐ˜์‘ํ˜•

Only plain objects, and a few built-ins, can be passed to Server Actions. Classes or null prototypes are not supported.

๐Ÿ’ก์ƒํ’ˆ ์ €์žฅ ์ „ ์„œ๋ฒ„์— ์ด๋ฏธ์ง€๋ฅผ ๋จผ์ € ์—…๋กœ๋“œ ํ•˜๋ ค ํ–ˆ์œผ๋‚˜
์ผ๋ฐ˜ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ์ง๋ ฌํ™” ํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋‚˜ null ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜๊ธฐ์ง€ ๋ชปํ•œ๋‹ค๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐ›์•˜๋‹ค.

 

ํ•ด๊ฒฐ์ฑ… FormData

ํด๋ผ์ด์–ธํŠธ > ์„œ๋ฒ„ ์ „์†ก ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•ด ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ , ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•ด ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ FormData๋Š” ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋น„๊ตฌ์กฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์ „์†ก๋˜๋ฏ€๋กœ ๋ณ„๋„์˜ ์ง๋ ฌํ™” ๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์ „

const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {
    const files = e.target.files;

    if (!files) return;

    for (let i = 0; i < files.length; i++) {
			//file ํƒ€์ž… ์ง์ ‘ ๋„˜๊ธฐ๊ธฐ
      const res = await imageUpload(files[i], 'temp');
    }
  };

์ˆ˜์ • ํ›„

const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {
    const files = e.target.files;

    if (!files) return;

    for (let i = 0; i < files.length; i++) {
      const formData = new FormData();
      formData.append('file', files[i]);
      // ์ˆ˜์ •๋œ formData ๋„˜๊ธฐ๊ธฐ
      const res = await imageUpload(formData, 'temp');
    }
  };

ํ•ด๊ฒฐ์ฑ… API Route

์„œ๋ฒ„ ์•ก์…˜์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด(File, Blob, Buffer ๋“ฑ)๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๊ธฐ์— API ๋ผ์šฐํŠธ๋‚˜ ์™ธ๋ถ€ API ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const response = await fetch('/api/getImageUrl');
const { url } = await response.json();

// S3์— ํŒŒ์ผ ์—…๋กœ๋“œ
await fetch(url, {
  method: 'PUT',
  body: file,
  headers: {
    'Content-Type': file.type,
  },
});

 

ํ•„์ž๋Š” API Route ์—†์ด Server Action๊ณผ Prisma๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— FormData๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'NEXT' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

AWS S3 Access Denied CopyObjectCommand  (0) 2024.10.18
NEXT JS + Google Analytics Connect Setting  (0) 2024.08.07
Parallel Routes Modal Difficult Error  (0) 2024.07.25
NextJs Next-auth getSession() ๋กœ๊ทธ์ธ ์ •๋ณด ํ™•์ธ  (0) 2024.07.23
NEXT 14 NEXT-AUTH 5 middleware.ts not working  (0) 2024.07.11
    'NEXT' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • AWS S3 Access Denied CopyObjectCommand
    • NEXT JS + Google Analytics Connect Setting
    • Parallel Routes Modal Difficult Error
    • NextJs Next-auth getSession() ๋กœ๊ทธ์ธ ์ •๋ณด ํ™•์ธ
    arkhyeon
    arkhyeon

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”