我有一个使用 curl 将文档上传到 Alfresco 的 Perl 脚本。
一些文档的文件名中有 & 号,最初这会导致 curl 失败。我通过在 & 符号前面放置一个克拉符号来解决这个问题。但是现在我发现有些文档在 & 符号的两边都没有空间时无法上传。文件名中带有空格和 & 符号的其他文档确实加载成功。
正在运行的 Perl 代码片段是:
# Escape & for curl in file name with a ^ my $downloadFileNameEsc = ${downloadfile}; $downloadFileNameEsc =~ s/&/^&/g; $command = "curl -u admin:admin -F file=\@${downloadFileNameEsc} -F id=\"${docId}\" -F title=\"${docTitle}\" -F tags=\"$catTagStr\" -F abstract=\"${abstract}\" -F published=\"${publishedDate}\" -F pubId=\"${pubId}\" -F pubName=\"${pubName}\" -F modified=\"${modifiedDate}\" -F archived=\"${archived}\" -F expiry=\"${expiryDate}\" -F groupIds=\"${groupIdStr}\" -F groupNames=\"${groupNameStr}\" ${docLoadUrl}";
logmsg(4, $command);
my @cmdOutput = `$command`;
$exitStatus = $?;
my $upload = 0;
logmsg(4, "Alfresco upload status $exitStatus");
if ($exitStatus != 0) {
您可以看到我正在使用反引号来执行 curl 命令,以便我可以读取响应。perl 脚本正在 windows 下运行。
这有效地试图运行的是:
curl -u admin:admin -F file=@tmp-download/Multiple%20Trusts%20Gift%20^&%20Loan.pdf -F id="e2ef104d-b4be-4896-8360-7d6f2e7c7b72" .... 这行得通。
curl -u admin:admin -F file=@tmp-download/Quarterly_Buys^&sells_Q1_2006.doc -F id="78d18634-ee93-4c29-b01d-270aeee3219a" .... 这失败了!!
就我所见,唯一的区别是,在一个有效的文件名中,文件名中有空格(%26)在&符号周围的某处,不一定在&符号旁边。
我不明白为什么一个成功运行而另一个没有。认为它必须与文件名中的反引号和&符号有关。我没有尝试使用系统,因为我想捕获响应。
任何想法,因为我已经用尽了所有选择。