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

Ben*_*der 13 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"
Run Code Online (Sandbox Code Playgroud)

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

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

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

Phi*_*lip 9

如果你希望能够使用访问该文件的内容$app->request->post('content');,您的卷曲要求必须使用<,而不是@content场,

curl -i http://localhost/test/index.php -X POST -F "name=file.png" \
  -F "content=</var/www/html/test/file.png"
Run Code Online (Sandbox Code Playgroud)

从curl的手册页:

要强制'content'部分为文件,请在文件名前加上@符号.要从文件中获取内容部分,请在文件名前加上符号<.@和<之间的区别在于@使文件作为文件上传附加到帖子中,而<生成文本字段并从文件中获取该文本字段的内容.

通过使用@,您将该字段标记为文件.从技术上讲,这会为Content-Disposition字段添加标题(RFC 2388,如果您感兴趣的话).PHP会检测到并自动将字段存储在内部$_FILES而不是$_POST像RaphaëlMarié在评论中所说的那样,这就是为什么你不能使用它来访问内容的原因$app->request->post.

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