curl file upload with semicolons in filename

孤街浪徒 提交于 2020-06-16 17:20:08

问题


I'm implementing an automated, command line file uploader using curl to a servlet.

The problem is, I've got tens of thousands of files with semicolons (;) in the filenames. I'm well aware of the annoyance of this but it is a legacy app that continues to produce new files each day. Renaming is not really an option for compatibility reasons downstream.

I've tried quoting, escaping, converting to "%3b", fully qualifying the path... the obvious stuff... but nothing seems to work, and it fails to send from the client side. I'm on my mac (bundled curl version 7.21.3) but that shouldn't make a difference?

Any ideas?

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:~$ 

回答1:


curl uses ; to separate type (or other directives) from the actual name, so I'd simply use stdin instead:

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

You may possibly add filename= directive as well if desired (but without the semicolon in the name!).




回答2:


According to CURL man pages, when you have ; or , in your form data(file or raw) you should always enclose it in double quotes. CURL MAN

So just enclose the filename in double quotes and it should work



来源:https://stackoverflow.com/questions/9745611/curl-file-upload-with-semicolons-in-filename

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!