无法使用cURL将文件作为表单数据发送

时间:2015-04-30 23:12:19

标签: php curl slim

我正在尝试通过命令行发送cURL请求。以下是我的要求

curl -i http://localhost/test/index.php 
-X POST 
-F "name=file.png" 
-F "content=@/var/www/html/test/file.png"

我遇到的问题是文件没有随请求一起发送。该名称被发送正常但不是文件。任何人都可以看到我做错了什么吗?

我已经检查了文件的权限,因为我认为这可能是问题,但它们很好

后端是使用PHP Slim框架编写的,我正在执行以下操作$app->request->post('content');

3 个答案:

答案 0 :(得分:9)

如果您希望能够使用$app->request->post('content');访问文件的内容,则您的curl请求必须使用<代替@ content字段,< / p>

curl -i http://localhost/test/index.php -X POST -F "name=file.png" \
  -F "content=</var/www/html/test/file.png"

来自curl的联机帮助页:

  

迫使                 'content'部分为文件,文件名前缀为@符号。要从文件中获取内容部分,请在文件名前加上符号&lt;前缀。 @和&lt;之间的区别然后,@使文件作为文件上传附加在帖子中,                 而&lt;创建一个文本字段,然后从文件中获取该文本字段的内容。

使用@,您将该字段标记为文件。从技术上讲,如果您感兴趣,这会在字段RFC 2388中添加Content-Disposition标头。 PHP检测到并自动将字段存储在$_FILES而不是$_POST中,正如RaphaëlMalié在评论中所述,这就是您无法使用$app->request->post访问内容的原因。

但是,如果您想支持使用浏览器的$_FILES元素和表单进行上传,则应考虑在后端切换到使用<input type=file>。那些总是设置Content-Disposition标题。

答案 1 :(得分:0)

php版本5.2.6及更低版本中有bug。验证您的PHP版本并最新测试。这可能是问题所在。

答案 2 :(得分:0)

@Bender,使用符号 @ 但对您的PHP代码进行更改,以便您使用 $ _ FILES 变量。那会有所帮助。 确保为cURL提供完全绝对路径。否则你会收到错误。

请在此处提及相同类型的SO问题:File Upload to Slim Framework using curl in php

希望这有帮助。