用文件名中的分号卷曲文件上传

时间:2012-03-16 23:04:33

标签: macos file-upload curl escaping filenames

我正在使用curl实现一个自动命令行文件上传器到servlet。

问题是,我在文件名中有数万个带分号(;)的文件。我很清楚这种烦恼,但它是一个遗留应用程序,每天都会继续生成新文件。由于下游的兼容性原因,重命名实际上不是一种选择。

我试过引用,转义,转换为“%3b”,完全符合路径......显而易见的东西......但似乎没有任何效果,而且它无法从客户端发送。我在我的Mac上(捆绑卷曲版本7.21.3),但这应该没有区别?

有什么想法吗?

macbookpro:~$ curl -F upload=@"my file.txt" http://localhost:8080/data/upload
ok
macbookpro:~$ curl -F upload=@"my;file.txt" http://localhost:8080/data/upload
curl: (26) failed creating formpost data
macbookpro:~$ curl -F upload=@"my\;file.txt" http://localhost:8080/data/upload
curl: (26) failed creating formpost data
macbookpro:~$ curl -F upload=@"my\\;file.txt" http://localhost:8080/data/upload
curl: (26) failed creating formpost data
macbookpro:~$ 

2 个答案:

答案 0 :(得分:7)

curl使用;将类型(或其他指令)与实际名称分开,所以我只是使用stdin代替:

cat 'my;file.txt' | curl -F upload=@- http://localhost:8080/data/upload

如果需要,您也可以添加filename=指令(但名称中没有分号!)。

答案 1 :(得分:-1)

根据CURL手册页,当表单数据(文件或原始文件)中包含;,时,应始终将其用双引号引起来。 CURL MAN

所以只需将文件名用双引号引起来就可以了