我试图通过命令行发送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');
如果你希望能够使用访问该文件的内容$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
标题.