我有一个表格可以上传视频并发送到远程目的地。我有一个cURL请求,我希望使用Guzzle将其“翻译”为PHP。
到目前为止,我有这个:
public function upload(Request $request)
{
$file = $request->file('file');
$fileName = $file->getClientOriginalName();
$realPath = $file->getRealPath();
$client = new Client();
$response = $client->request('POST', 'http://mydomain.de:8080/spots', [
'multipart' => [
[
'name' => 'spotid',
'country' => 'DE',
'contents' => file_get_contents($realPath),
],
[
'type' => 'video/mp4',
],
],
]);
dd($response);
}
这是我使用并想要翻译成PHP的cURL:
curl -X POST -F 'body={"name":"Test","country":"Deutschland"};type=application/json' -F 'file=@C:\Users\PROD\Downloads\617103.mp4;type= video/mp4 ' http://mydomain.de:8080/spots
所以当我上传视频时,我想替换这个硬编码的
C:\用户\ PROD \下载\ 617103.mp4
当我运行时,我收到错误:
客户端错误:
POST http://mydomain.de:8080/spots
导致400 Bad Request
响应:请求正文无效:期望表单值'body`'客户端错误:
POST http://mydomain.de/spots
导致400 Bad Request
响应: 请求正文无效:期望表单值'body'
答案 0 :(得分:4)
我会查看Guzzle的multipart
请求选项。我看到两个问题:
body
)。 curl请求中的type
映射到标头Content-Type
。来自$ man curl
:
您还可以使用'type ='来告诉curl要使用的Content-Type。
尝试类似:
$response = $client->request('POST', 'http://mydomain.de:8080/spots', [
'multipart' => [
[
'name' => 'body',
'contents' => json_encode(['name' => 'Test', 'country' => 'Deutschland']),
'headers' => ['Content-Type' => 'application/json']
],
[
'name' => 'file',
'contents' => fopen('617103.mp4', 'r'),
'headers' => ['Content-Type' => 'video/mp4']
],
],
]);
答案 1 :(得分:0)
multipart
选项时,请确保您没有传递 content-type
=> application/json
:)multipart
选项。它是一个数组数组,其中 name
是表单字段名称,它的值是发布的表单值。一个例子:'multipart' => [
[
'name' => 'attachments[]', // could also be `file` array
'contents' => $attachment->getContent(),
'filename' => 'dummy.png',
],
[
'name' => 'username',
'contents' => $username
]
]