我正在使用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:~$
答案 0 :(得分:7)
curl
使用;
将类型(或其他指令)与实际名称分开,所以我只是使用stdin代替:
cat 'my;file.txt' | curl -F upload=@- http://localhost:8080/data/upload
如果需要,您也可以添加filename=
指令(但名称中没有分号!)。
答案 1 :(得分:-1)
根据CURL手册页,当表单数据(文件或原始文件)中包含;
或,
时,应始终将其用双引号引起来。
CURL MAN
所以只需将文件名用双引号引起来就可以了