我正在嘗試使用來自 bash 和 cURL的
就我而言,它是一個帶有功能代碼的 zip 存檔。因此,我將檔案讀取為位元組并將結果注入 JSON 字串。并發送請求。
#Read file content
FILE_LOC="/Users/Constantine/Downloads/archiveName.zip"
FILE_BYTES=`(xxd -b ${FILE_LOC}) | base64`
#Inject content into JSON
DATA=${DATA/PLACEHOLDERFORCONTENT/$FILE_BYTES}
#Send the request
eval "$(echo curl -H \"$HEADER\" --data-binary $DATA https://serverless-functions.api.cloud.yandex.net/functions/v1/versions)"
在這里,我得到-bash: /usr/bin/curl: Argument list too long錯誤。我懷疑這是因為 cURL 將二進制內容解釋為要讀取的檔案名,但我不確定如何解決這個問題。
如何將檔案中的二進制內容提供給 JSON 字串?
uj5u.com熱心網友回復:
您正在使用bash下的 cURL 呼叫發送請求。并且外殼具有您在很大程度上超越的最大線長度。您最簡單的解決方法是將 JSON 資料保存到檔案中,并為 cURL 提供指向該檔案的指標,以便保持包含行長:
#Make data JSON
data_file="data.json"
> "${data_file}"
for ELEMENT in \
"'"\
'{"runtime":"dotnetcore31", "entrypoint": "Function.Handler",'\
'"resources":{"memory":"134217728"}, "content": "PLACEHOLDERFORCONTENT",'\
'"ServiceAccountId":"accId", '\
'"function_id": "funcId"}'\
"'"; do
echo "${ELEMENT}"
done >> "${data_file}"
#Read file content
FILE_LOC="/Users/Constantine/Downloads/archiveName.zip"
FILE_BYTES=$(xxd -b "${FILE_LOC}" | base64)
#Inject content into JSON
sed -i "s/PLACEHOLDERFORCONTENT/${FILE_BYTES}/" "${data_file}"
#Send the request
eval "$(echo curl -H \"$HEADER\" --data-binary "@${data_file}" https://serverless-functions.api.cloud.yandex.net/functions/v1/versions)"
除此之外,您的代碼似乎很復雜。你可以稍微簡化一下。避免回圈,一次性創建檔案并避免eval:
#Make data JSON
data_file="data.json"
FILE_LOC="/Users/Constantine/Downloads/archiveName.zip"
cat <<-EOF > "${data_file}"
{
"runtime": "dotnetcore31",
"entrypoint": "Function.Handler",
"resources": {
"memory": "134217728"
},
"content": "$(xxd -b "${FILE_LOC}" | base64)",
"ServiceAccountId": "accId",
"function_id": "funcId"
}
EOF
#Send the request
curl -H "$HEADER" --data-binary "@${data_file}" https://serverless-functions.api.cloud.yandex.net/functions/v1/versions
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528134.html
標籤:重击卷曲嘘yandex云
