개발자

<input type="file"> 관련하여..

2023년 04월 11일조회 174

<template> <label for="camera1"> 촬영 </label> <input type="file" id="camera1" accept="image/*" capture="camera" style="display: none" @change="onStartFileSelected" /> </template> <script> const startFile = ref({}) //@change const onStartFileSelected = event => { const startFileInfo = event.target.files[0] startFile.value = startFileInfo if (startFileInfo) { startImageYn.value = 'Y' console.log('startFileInfo', typeof startFileInfo) } else { startImageYn.value = ' ' console.log('no image') } } // 파일 포함 다음 상태 업데이트하는 api const fileUpdateStatusApiHandler = async () => { const formData = new FormData() console.log('startFile===',startFile.value)//File형식 데이터 정상 찍힘 -> 타입 : 객체(Object) console.log('startFile',JSON.stringify(startFile.value)) //안찍힘???왜?????? 객체->스트링으로 바꿈 formData.append('file_upload', JSON.stringify(startFile.value),startFile.value) //빈값이 들어감.. try { const res: any = await ApiCert.post( API_URL.url, formData, { headers: { 'Content-Type': 'multipart/form-data' } } ) console.log('response =====', res) if (res.resCode === 'OK') { console.log('OK') } else { alert(res.resMsg) } } catch (err: any) { console.log('error =====', err) } } </script> file형식 데이터를 api보낼때 formData에 넣어 보내고싶은데 file이 안들어가네요.. file_upload: {} 빈값으로 들어갑니다. 도와주세용

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

김현진님의 프로필 사진

File 데이터를 JSON.stringify로 바로 변환하는 것이 불가능하기 때문입니다. startFile.value 값에 정상적인 File 값이 찍힌다고 하셨으니 startFile.value의 값을 사용해서 다음과 같이 새로운 객체를 생성한 뒤에 새로운 객체를 JSON.stringify로 변환해서 사용하면 될거 같습니다.

1
2
3
4
5
6
7
8
9
10
11
// startFile.value 값을 가진 새로운 객체 생성
const newObject  = {
   'lastModified'     : startFile.value.lastModified,
   'lastModifiedDate' : startFile.value.lastModifiedDate,
   'name'             : startFile.value.name,
   'size'             : startFile.value.size,
   'type'             : startFile.value.type
};  
 
// 새로운 객체를 가지고 JSON.stringify
JSON.stringify(newObject);
커리어리 AI 봇님의 프로필 사진

' <input type="file"> '에서 파일 데이터를 가져오고 이를 FormData에 추가하여 API로 전송하는 데 문제가 발생한 것 같습니다. 이 문제를 해결하기 위해 아래의 변경사항을 적용해보세요. 1. ' JSON.stringify(startFile.value) '를 사용하지 마세요. 파일 객체를 문자열로 변환하려고 하면 데이터 손실이 발생할 수 있습니다. 대신, FormData에 파일 객체를 직접 추가하세요. 2. FormData에 파일을 추가할 때 ' append ' 메소드의 인수를 올바르게 전달하세요. 첫 번째 인수는 키, 두 번째 인수는 값(파일 객체)입니다. 세 번째 인수는 선택적이며 파일 이름을 지정할 수 있습니다. 변경된 코드는 아래와 같습니다. 아래의 변경사항을 적용하면 파일 객체가 올바르게 FormData에 추가되고 API로 전송됩니다. ----- ✅ Chat GPT의 답변을 평가해 주세요! 틀린 내용은 없는지, 답변이 도움이 되었는지 댓글로 작성해 주세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const fileUpdateStatusApiHandler = async () => {
  const formData = new FormData();
  console.log('startFile===', startFile.value); // File형식 데이터 정상 찍힘 -> 타입 : 객체(Object)

  formData.append('file_upload', startFile.value, startFile.value.name); // 파일 객체를 직접 추가

  try {
    const res: any = await ApiCert.post(
      API_URL.url,
      formData,
      {
        headers: {
          'Content-Type': 'multipart/form-data',
        },
      }
    );
    console.log('response =====', res);
    if (res.resCode === 'OK') {
      console.log('OK');
    } else {
      alert(res.resMsg);
    }
  } catch (err: any) {
    console.log('error =====', err);
  }
};

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!