Загрузить файл с запятой в названии с помощью curl

6412
Tyilo

Как я могу загрузить файл с именем yes, this filename has a comma.txtс помощью Cli curl?

Обычно вы делаете это, чтобы загрузить файл с curl:

curl --progress-bar -F "fileUpload=@filename.txt" 

Однако curlинтерпретирует запятые как несколько файлов для загрузки, так что это не будет работать:

curl --progress-bar -F "fileUpload=@yes, this filename has a comma.txt" 

Как я могу избежать имени файла?


Я уже нашел обходной путь, создав временную символическую ссылку на исходный файл и передав ее в curl. Однако проблема заключается в том, что имя файла, которое curlотправляется на сервер, является именем символической ссылки, а не оригинальным файлом.

3

1 ответ на вопрос

4
terdon

Вы не сказали, какую ОС вы используете. Следующие решения работают для Linux (не только для, curlно и для большинства видов экранирования) :

  • Поместите имя файла в кавычки (их также нужно экранировать):

    curl --progress-bar -F "fileUpload=@\"yes, this filename has a comma.txt\"" 
  • Избежать запятой

    curl --progress-bar -F "fileUpload=@yes\, this filename has a comma.txt" 
Я использую Mac OS X 10.8.2, работало только цитирование. Тот, в котором экранируется запятая, пытается загрузить файл с именем «yes» (`curl: (26) не может открыть файл« yes \ »`). Tyilo 10 лет назад 0
В Mac OSX 10.9.4 мне приходилось ставить кавычки после `@` примерно так: `curl --progress-bar -F" fileUpload = @ \ "да, в этом имени файла есть запятая.txt \" "` spyle 9 лет назад 1
Была такая же проблема, как spyle на Ubuntu 14.04. Ответ Тердона фактически отправляет буквальное имя файла вместо содержимого файла. Cory R. King 9 лет назад 0
@ CoryR. Да, конечно, это намеренно. Как еще это будет работать? Чтобы отправить содержимое файла, вам нужно указать имя удаленного файла для записи. terdon 9 лет назад 0

Похожие вопросы