Почему эта команда curl возвращает неожиданный EOF - PullRequest
0 голосов
/ 07 февраля 2019

Я немного новичок в 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 Ответ

0 голосов
/ 10 февраля 2019

Судя по параметрам, передаваемым в 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[@]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...