를 가져올 사용하여 POST 방법 : 내가 isomorphic-fetch를 사용하여이 요청을 재현하기 위해 노력하고있어다중/폼 데이터 헤더와 FormData이 잘 작동 CURL 예입니다
curl -X POST \
<url> \
-H 'authorization: Bearer <token>' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F [email protected] \
-F userId=<userId>
.
const formData = new FormData();
formData.append('file', file);
formData.append('userId', userId);
return fetch(`<url>`, {
method: 'POST',
headers: {
'Content-Length': file.length
'Authorization: Bearer <authorization token>',
'Content-Type': 'multipart/form-data'
},
body: formData
})`
내가 FormData
에 전달 된 file
을 생성하기 위해 fs.readFileSync
를 사용
나는 다음과 같은 코드를 시도했습니다.
위의 예는 (헤더를 통해 전송) 토큰에 포함 된 userId
가 userId
이 formData
에서 전달 일치하지 않는 없다는 오류 메시지와 함께 401
HTTP 상태 코드 (무단)을 반환합니다.
그래서 내 생각에 REST API에 도착한 FormData
이 적절히 형성되지 않았다는 것입니다.
문제
은Content-Length
헤더와 관련이있을 수 있습니다,하지만 난 (내가
Content-Length
헤더를 사용하지 않는 경우 내가
411
HTTP 상태 코드
Content-Length
헤더 누락 수)을 계산하는 더 좋은 방법을 찾지 못했습니다.
Content-Length
헤더의 값이 올바르지 않아 실패 할 수 있습니까?
왜 이것이 실패하고 더 좋은 방법을 디버깅하는 지에 대한 다른 제안 사항이 있습니까?
이 문제를 명확히하려면 추가 정보가 필요하면 질문하십시오.
문제가 같은 (401
오류 HTTP 상태 코드 응답) 유지 그러나 나는 방법 formData.getLengthSync()
를 사용하여 올바른 Content-Length
값을 얻기 위해 form-data 모듈을 시도했습니다
UPDATE.
를 드롭 'Content-Type' 요청 헤더는 다중 부분 경계를 포함하도록 브라우저에 의해 자동으로 생성되어야합니다. 나는 당신이 그것과'Content-Length' 헤더를 버리면 괜찮을 것이라고 생각합니다. – idbehold
나는 그것을 성공하지 않고 이미 시도해 보았습니다.'Content-Length' 헤더를 보내지 않으면'API'가'411' 오류 HTTP 상태 코드를 반환합니다 :'서버가 정의 된 Content- Length' – rfc1484
Content-Length를 12345로 설정하십시오. 업로드하려는 서버가 잘 설계되지 않았습니다. – idbehold