Почему эта команда curl возвращает неожиданный EOF
Я немного новичок в Bash и cURL и не могу понять, почему этот файл Bash не запускается без Unexpected EOF
ошибка.
Эта команда cURL должна выгрузить в службу хранения большой файл (в приведенном ниже примере сценария, где-то между 300 и 400 МБ) в виде фрагментов по 20 МБ. Как только все МБ загружены, вторая команда "завершает" загрузку. Обе команды используют один и тот же GUID.
внутри upload-bits.sh
:
#!/bin/sh
for i in {0..20}; do
curl -X POST \
https://community.<company>.com/api.ashx/v2/cfs/temporary.json \
-H 'Rest-User-Token: 12345' \
-F UploadContextId=21f23109-aac2-44ef-8b89-c0f62e67da4d \
-F FileName='file.zip' \
-F TotalChunks=20 \
-F CurrentChunk=$i \
-F 'file=@file.zip'
done
Сценарий Bash выдает Unexpected EOF
ошибка. Я пробовал одну только команду cURL без части скрипта Bash и заменил CurrentChunk
с 0
а также 1
безуспешно. Я также использовал валидатор скрипта, который подтвердил, что в скрипте нет проблем. Я тоже побежал dos2unix
на это в стремлении устранить проблемы конца строки.
Я еще не смог использовать этот второй сценарий, так как первый сценарий не работал, но я публикую его для контекста, если я не объясняю желаемый общий процесс в целом.
complete-upload.sh
:
curl -X POST \
https://community.<company>.com/api.ashx/v2/media/371/files.json \
-H 'Rest-User-Token: 12345' \
-F 'Name=file.zip' \
-F ContentType=application/zip \
-F FileName='file.zip' \
-F FileUploadContext=21f23109-aac2-44ef-8b89-c0f62e67da4d
Буду благодарен за любые советы или идеи. Спасибо.
1 ответ
Судя по параметрам, передаваемым в curl, сервер ожидает фрагментированные данные.
Однако команда curl отправляет весь файл 20 раз.
Если посмотреть на определение CurrentChunk по адресу https://community.telligent.com/community/10/w/api-documentation/61481/upload-cfs-rest-endpoint, возможно, подойдет такая модификация:
#!/bin/bash
# using GNU split options will make arithmetic simpler
# with -d, we may get numbers like 09 which are invalid octal
# start from 101 if CurrentChunk is one-based
# start from 100 if CurrentChunk is zero-based
split -b20M -a3 --numeric-suffixes=101 file.zip part.
partlist=( part.* )
numparts=${#partlist[@]}
for part in ${partlist[@]}; do
i=$(( ${part##*.}-100 ))
curl -X POST \
https://community.<company>.com/api.ashx/v2/cfs/temporary.json \
-H 'Rest-User-Token: 12345' \
-F UploadContextId=21f23109-aac2-44ef-8b89-c0f62e67da4d \
-F FileName='file.zip' \
-F TotalChunks=$numparts \
-F CurrentChunk=$i \
-F 'file=@'$part
done
rm ${partlist[@]}