Argument list too long
cUrl을 사용하여 JSON 본문에 Base64 형식의 파일을 보내려고 할 때 오류가 발생합니다 .
나는 다음과 같은 것을 사용하고 있습니다 :
DATA=$( base64 "$FILE" )
curl -X POST -H "Content-Type: application/json" -d '{
"data": "'"$DATA"'"
}' $HOST
JSON 본문에서 데이터를 가져오는 다른 방법이 있나요?
파일 시스템에서 파일을 읽고 이를 Base64로 변환한 다음 본문으로 보내야 한다고 생각해보세요.
답변1
base64로 인코딩된 파일이 너무 커서 매개변수 목록에 맞지 않으면 파일을 통해 전달해야 합니다. 내가 생각할 수 있는 가장 쉬운 방법 중 하나는 표준 입력을 통해 전달하는 것입니다. ~에서컬 맨 페이지-d @-
, 명령줄 대신 표준 입력에서 읽기를 사용할 수 있습니다 .
curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
답변2
사용jo
, base64로 인코딩된 파일을 쉘 변수에 저장하지 않고:
jo data=%"$FILE" |
curl -X POST -H 'Content-Type: application/json' -d @- "$HOST"
그러면 키가 포함된 JSON 문서가 생성됩니다 data
. 이 키의 값은 이 값이 참조하는 파일의 base64 인코딩 콘텐츠가 됩니다 $FILE
.
after 매개변수를 %
사용하면 파일이 base64로 인코딩됩니다. 대신 사용하면 파일이 JSON으로 인코딩된 문자열로 포함됩니다.=
jo
@