Php 使用HTTP发布文件时出错-部分为空
我尝试通过GuzzleHTTP将文件从我的应用程序发送到外部API,我的做法如下:Php 使用HTTP发布文件时出错-部分为空,php,laravel,api,guzzle,Php,Laravel,Api,Guzzle,我尝试通过GuzzleHTTP将文件从我的应用程序发送到外部API,我的做法如下: public function storeImagesInAmazon(Request $request) { $uploadFilePath = 'some/endpoint'; $file = $request->file('file'); $client = new Client(); $response = $client->request('POST',
public function storeImagesInAmazon(Request $request) {
$uploadFilePath = 'some/endpoint';
$file = $request->file('file');
$client = new Client();
$response = $client->request('POST', $uploadFilePath, [
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'multipart/form-data',
],
'multipart' => [
[
'name' => 'file',
'contents' => $file
]
]
]);
$result = json_decode($response->getBody(), true);
return [
'hashedID' => $result['hashedID']
];
}
我得到的错误是:
服务器错误:POST-some/endpoint
导致500内部服务器错误
响应:\n
处理文件时出错:无法处理文件:零件为空
我通过邮递员对它进行了测试,在身体形态数据中添加了key='file',value='some_file.pdf',我确信文件是正确的,我的意思是它没有损坏,我试着发布不同的文件,大的,小的,pdf或jpg/png
但是我仍然有这个问题,我找不到解决办法。我找到了这个解决办法
我想说的是,你需要$option作为你在那篇文章中的下一个参数
$response=$client->post('api',$options)
根据文档,$option是头文件、多部分文件或其他选项的位置。我已经尝试使用$options,它在我的案例中起了作用。我找到了这个解决方案
我想说的是,你需要$option作为你在那篇文章中的下一个参数
$response=$client->post('api',$options)
根据文档,$option是头文件、多部分文件或其他选项的位置。我已经尝试使用$options,它在我的案例中起作用。删除
内容类型
标题。对于多部分请求,它还需要包含一个适当的边界值——您正在设置的边界值中完全没有这个边界值。通过使用multipart
键,guzzle应该知道它必须自己设置它。@CBroe我删除了Content-Type头,但是我得到了错误:不是一个multipart请求,假设part为null:(我尝试了这个主题的解决方案:但什么都没有改变,$file=$request->file('file')
do?@CBroe这样我只从请求中获取文件。我还尝试通过'contents'=>fopen($file->getRealPath(),'r')或'contents'=>file\u get\u contents($file)将文件传递给'contents'删除Content-Type
标题。对于多部分请求,这还需要包含一个正确的边界值,该边界值与您正在设置的边界值完全不符。通过使用multipart
键,guzzle应该知道它必须自己设置它。@CBroe我删除了Content-Type标题,但随后出现错误:不是多部分请求,假设部分为空。:(我尝试了本主题的解决方案:但没有任何变化。$file=$request->file('file')
do?@CBroe这样做,我只是从请求中获取文件。我还尝试通过'contents'=>fopen('file->getRealPath(),'r')或'contents'=>file\u get\u contents('file)将文件传递给'contents'