curl文件上传,文件名中使用分号。

问题描述 投票:1回答:2

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

问题是,我有成千上万个文件,文件名里有分号(;)。我很清楚这很烦人,但这是个遗留的应用程序,每天都会不断产生新的文件。由于下游的兼容性原因,重命名并不是一个真正的选择。

我试过引用、转义、转换为"%3b"、完全限定路径......很明显的东西......但似乎没什么用,而且从客户端发送失败。我使用的是我的Mac系统(捆绑了7.21.3版本的curl),但这不应该有什么不同吗?

有什么好办法吗?

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:~$ 
macos file-upload curl escaping filenames
2个回答
7
投票

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

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

你可以添加 filename= 指令(但名字中不加分号!)。


0
投票

根据CURL的手册,当你拥有了 ;, 在你的表格数据(文件或原始数据)中,你应该总是用双引号括起来。检索人

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

© www.soinside.com 2019 - 2024. All rights reserved.