为什么这个curl命令返回Unexpected EOF



我对Bash和cURL有些陌生,无法理解为什么这个Bash文件不能在不引发Unexpected EOF错误的情况下运行。

这个cURL命令应该将一个大文件(在下面的示例脚本中,大约在300到400MB之间)以20MB的块上传到存储服务。上传完所有MB后,第二个命令"完成"上传。两个命令都使用相同的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错误。我尝试过在没有脚本Bash部分的情况下单独使用cURL命令,并用01替换了CurrentChunk,但没有成功。我还使用了一个脚本验证器,它确认了脚本中没有问题。我还在上面运行了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

如果有任何建议或见解,我将不胜感激。非常感谢。

根据传递给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[@]}

最新更新